[英]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.