C# Unity构造函数对象设置不正确

C# Unity构造函数对象设置不正确,c#,constructor,unity-container,C#,Constructor,Unity Container,问题背景: 我试图通过使用Unity设置我试图创建对象的类的构造函数,但当前遇到以下错误: 错误: 结果消息: 测试方法ABCTestProject.TFStests.Check_Interface_CheckOut_方法引发异常: System.InvalidOperationException:类型ABC.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有采用参数ITfsVcQaCheckoutWorker、ITfsVc

问题背景:

我试图通过使用Unity设置我试图创建对象的类的构造函数,但当前遇到以下错误:

错误:

结果消息: 测试方法ABCTestProject.TFStests.Check_Interface_CheckOut_方法引发异常: System.InvalidOperationException:类型ABC.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有采用参数ITfsVcQaCheckoutWorker、ITfsVcQaCheckinWorker、VersionControlServer的构造函数

我相信这是我在注册unity对象时错过的设置,因为TfsPromotion管理器类确实希望将对象传递给它

守则:

下面是Unity creation类:

internal static ITfsVcPromotionManager CreateUnityObjects(VersionControlServer tfServer)
    {
        var unityContainer = new UnityContainer();


        var test = new TfsVcQaCheckoutWorker(tfServer);

        InjectionConstructor injectionConstructor = new InjectionConstructor(test);


        var test1 = new TfsVcQaCheckinWorker();

        InjectionConstructor injectionConstructor1 = new InjectionConstructor(test1);

        unityContainer.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(new InjectionConstructor(new ResolvedParameter(typeof(ITfsVcQaCheckoutWorker)), new ResolvedParameter(typeof(ITfsVcQaCheckinWorker)), new ResolvedParameter(typeof(VersionControlServer))));


        return unityContainer.Resolve<ITfsVcPromotionManager>();   
    }

该构造函数是内部的,但Unity将只查看公共构造函数。这就好比当您在内部声明构造函数时,您告诉.net CLR至少应该使用该构造函数从声明该类的同一程序集中创建该类。 因此,最简单的方法是将构造函数声明为public

如果您不能公开构造函数,请查看及其答案。在这里,创建工厂方法或类并将其与InjectionFactory连接可能是一个不错的选择

internal TfsVcPromotionManager(ITfsVcQaCheckoutWorker checkOutWorker, ITfsVcQaCheckinWorker checkInWorker, VersionControlServer tfServer)
    {
        _checkoutWorker = checkOutWorker;
    }