我试图通过使用Unity将基于接口的两个对象注入到类构造函数中.
单元测试时我当前收到以下错误:
结果消息:
测试方法TestProject.TFStests.Check_Interface_CheckOut_Method引发异常:System.InvalidOperationException:类型Adp.Tools.VersionControl.TfsVersionControl.TfsVcPromotionManager没有带参数的构造函数(TfsVcQaCheckoutWorker).
以下代码是我的Unity类,用于注册和解析TfsVCPromotionManager
对象:
public class UnityClass { public static ITfsVcPromotionManager returnNewPromotionManager( VersionControlServer tfServer) { var container = new UnityContainer(); ITfsVcQaCheckinWorker test1 = CreateUnityCheckInWorker(); ITfsVcQaCheckoutWorker test2 = CreateUnityCheckOutWorker(tfServer); container.RegisterType( new InjectionConstructor(test2), new InjectionConstructor(test1)); return container.Resolve (); } private static ITfsVcQaCheckinWorker CreateUnityCheckInWorker() { var container = new UnityContainer(); container.RegisterType (); return container.Resolve (); } private static ITfsVcQaCheckoutWorker CreateUnityCheckOutWorker( VersionControlServer passedServer) { var container = new UnityContainer(); container.RegisterType ( new InjectionConstructor(passedServer)); return container.Resolve (); } }
这是TfsVcPromotionManager
班上的顾问.请注意,它清楚地基于接口的实例需要ITfsVcQaCheckoutworker
和ITfsVcCheckinWorker
.
private ITfsVcQaCheckoutWorker _checkOutWorker; private ITfsVcQaCheckinWorker _checkInWorker; public TfsVcPromotionManager(ITfsVcQaCheckoutWorker checkOutWorker, ITfsVcQaCheckinWorker checkInWorker) { if (checkOutWorker == null || checkInWorker == null) { throw new NullReferenceException(); } _checkOutWorker = checkOutWorker; _checkInWorker = checkInWorker; }
任何人都可以告诉我我做错了什么.