C# 构造函数参数不存在的异常';当它存在时,它就不存在了
我试图通过使用Unity将两个基于接口的对象注入到类构造函数中 单元测试时,我当前收到以下错误: 结果消息:C# 构造函数参数不存在的异常';当它存在时,它就不存在了,c#,exception,constructor,unity-container,integration-testing,C#,Exception,Constructor,Unity Container,Integration Testing,我试图通过使用Unity将两个基于接口的对象注入到类构造函数中 单元测试时,我当前收到以下错误: 结果消息: 测试方法TestProject.TFStests.Check\u接口\u签出\u方法引发异常: System.InvalidOperationException:类型Adp.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有接受参数的构造函数(TfsCqAcheckOutworker) 以下代码是我的Unity类,用
测试方法TestProject.TFStests.Check\u接口\u签出\u方法引发异常: System.InvalidOperationException:类型Adp.Tools.VersionControl.TfsVersionControl.TfsCpromotionManager没有接受参数的构造函数(TfsCqAcheckOutworker) 以下代码是我的Unity类,用于注册和解析
TfsVCPromotionManager
对象:
public class UnityClass
{
public static ITfsVcPromotionManager returnNewPromotionManager(
VersionControlServer tfServer)
{
var container = new UnityContainer();
ITfsVcQaCheckinWorker test1 = CreateUnityCheckInWorker();
ITfsVcQaCheckoutWorker test2 = CreateUnityCheckOutWorker(tfServer);
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2), new InjectionConstructor(test1));
return container.Resolve<TfsVcPromotionManager>();
}
private static ITfsVcQaCheckinWorker CreateUnityCheckInWorker()
{
var container = new UnityContainer();
container.RegisterType<ITfsVcQaCheckinWorker, ITfsVcQaCheckinWorker>();
return container.Resolve<TfsVcQaCheckinWorker>();
}
private static ITfsVcQaCheckoutWorker CreateUnityCheckOutWorker(
VersionControlServer passedServer)
{
var container = new UnityContainer();
container.RegisterType<ITfsVcQaCheckoutWorker, TfsVcQaCheckoutWorker>(
new InjectionConstructor(passedServer));
return container.Resolve<TfsVcQaCheckoutWorker>();
}
}
有谁能告诉我我做错了什么。它说它找不到“接受参数的构造函数(TfsCqaCheckOutworker)”,这确实是一个正确的说法。没有只接受一个参数的构造函数。我对Unity不是很熟悉,但我敢打赌,通过改变这一点,您的问题会得到解决:
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2),
new InjectionConstructor(test1))
container.RegisterType(
新注入构造函数(test2),
新注入构造函数(test1))
为此:
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2, test1))
container.RegisterType(
新的注入构造函数(test2,test1))
有关InjectionConstructor的,请参阅MSDN参考。我认为您应该以另一种方式使用多个参数注册容器。你试过这个吗
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2, test1)
);
container.RegisterType(
新的注入构造函数(test2、test1)
);
非常感谢杰夫·布里奇曼。这非常有效。我有点不好意思,没注意到。
container.RegisterType<ITfsVcPromotionManager, TfsVcPromotionManager>(
new InjectionConstructor(test2, test1)
);