C# 构造函数参数不存在的异常';当它存在时,它就不存在了

C# 构造函数参数不存在的异常';当它存在时,它就不存在了,c#,exception,constructor,unity-container,integration-testing,C#,Exception,Constructor,Unity Container,Integration Testing,我试图通过使用Unity将两个基于接口的对象注入到类构造函数中 单元测试时,我当前收到以下错误: 结果消息: 测试方法TestProject.TFStests.Check\u接口\u签出\u方法引发异常: System.InvalidOperationException:类型Adp.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有接受参数的构造函数(TfsCqAcheckOutworker) 以下代码是我的Unity类,用

我试图通过使用Unity将两个基于接口的对象注入到类构造函数中

单元测试时,我当前收到以下错误:

结果消息:
测试方法TestProject.TFStests.Check\u接口\u签出\u方法引发异常: System.InvalidOperationException:类型Adp.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有接受参数的构造函数(TfsCqAcheckOutworker)

以下代码是我的Unity类,用于注册和解析
TfsVCPromotionManager
对象:

public class UnityClass
{
    public static ITfsVcPromotionManager returnNewPromotionManager(
       VersionControlServer tfServer)
    {
        var container = new UnityContainer();

        ITfsVcQaCheckinWorker test1 = CreateUnityCheckInWorker();
        ITfsVcQaCheckoutWorker test2 = CreateUnityCheckOutWorker(tfServer);

        container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
            new InjectionConstructor(test2), new InjectionConstructor(test1));
        return container.Resolve<TfsVcPromotionManager>();
    }

    private static ITfsVcQaCheckinWorker CreateUnityCheckInWorker()
    {
        var container = new UnityContainer();

        container.RegisterType<ITfsVcQaCheckinWorker, ITfsVcQaCheckinWorker>();
        return container.Resolve<TfsVcQaCheckinWorker>();
    }

    private static ITfsVcQaCheckoutWorker CreateUnityCheckOutWorker(
        VersionControlServer passedServer)
    {
        var container = new UnityContainer();

        container.RegisterType<ITfsVcQaCheckoutWorker, TfsVcQaCheckoutWorker>(
            new InjectionConstructor(passedServer));
        return container.Resolve<TfsVcQaCheckoutWorker>();
    }
}
有谁能告诉我我做错了什么。

它说它找不到“接受参数的构造函数(TfsCqaCheckOutworker)”,这确实是一个正确的说法。没有只接受一个参数的构造函数。我对Unity不是很熟悉,但我敢打赌,通过改变这一点,您的问题会得到解决:

container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
    new InjectionConstructor(test2),
    new InjectionConstructor(test1))
container.RegisterType(
新注入构造函数(test2),
新注入构造函数(test1))
为此:

container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
    new InjectionConstructor(test2, test1))
container.RegisterType(
新的注入构造函数(test2,test1))

有关InjectionConstructor的,请参阅MSDN参考。

我认为您应该以另一种方式使用多个参数注册容器。你试过这个吗

container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
    new InjectionConstructor(test2, test1)
);
container.RegisterType(
新的注入构造函数(test2、test1)
);

非常感谢杰夫·布里奇曼。这非常有效。我有点不好意思,没注意到。
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
    new InjectionConstructor(test2, test1)
);