问题背景:
我正在尝试设置类的构造函数,我试图通过使用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;
}
答案 0 :(得分:0)
该构造函数是内部的,但Unity只会查看公共构造函数。 (当你在内部声明构造函数时,这是有意义的,你告诉.net CLR只能从你声明它的同一个程序集中创建类(至少使用那个构造函数))。 所以最简单的方法是将构造函数声明为public。
如果您无法公开构造函数,请查看this question及其答案。创建工厂方法或类并使用InjectionFactory连接它可能是一个不错的选择。