繁体   English   中英

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

[英]Unity constructor objects not setting correctly

问题背景:

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

错误:

结果消息:测试方法ABCTestProject.TFStests.Check_Interface_CheckOut_Method引发异常:System.InvalidOperationException:类型ABC.Tools.VersionControl.TfsVersionControl.TfsVcPromotionManager没有构造函数,该构造函数采用参数(ITfsVcQaCheckoutWorker,ITfsVcQControlaCheckServer)。

我相信这是我在注册统一对象时会错过的设置,因为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;
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM