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