簡體   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