Unity构造函数对象未正确设置

时间:2013-12-20 11:09:07

标签: c# constructor unity-container

问题背景:

我正在尝试设置类的构造函数,我试图通过使用Unity创建一个对象,但目前遇到此错误:

错误:

结果讯息: 测试方法ABCTestProject.TFStests.Check_Interface_CheckOut_Method抛出异常: System.InvalidOperationException:类型ABC.Tools.VersionControl.TfsVersionControl.TfsVcPromotionManager没有带参数的构造函数(ITfsVcQaCheckoutWorker,ITfsVcQaCheckinWorker,VersionControlServer)。

我相信这是我在注册unity对象时设置的原因,因为TfsPromotion Manager类确实希望将对象传递给它。

代码:

这是Unity创建类:

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>();   
    }

TfsPromotionManager构造函数:

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

1 个答案:

答案 0 :(得分:0)

该构造函数是内部的,但Unity只会查看公共构造函数。 (当你在内部声明构造函数时,这是有意义的,你告诉.net CLR只能从你声明它的同一个程序集中创建类(至少使用那个构造函数))。 所以最简单的方法是将构造函数声明为public。

如果您无法公开构造函数,请查看this question及其答案。创建工厂方法或类并使用InjectionFactory连接它可能是一个不错的选择。