JoR*_*JoR 2 dependency-injection unity-container
我正在尝试使用unity注册依赖项并将值传递给构造函数,使用下面的代码
container.RegisterType<IProviderContext, MockOrderServiceProviderContext>(new InjectionConstructor(new Pharmacy {SiteId = 2,DistrictCode = "2"}));
Run Code Online (Sandbox Code Playgroud)
但我越来越
“类型OrderService.Business.MockOrderServiceProviderContext没有采用参数(Pharmacy)的构造函数。”
构造函数。
public MockOrderServiceProviderContext(params object[] objects)
{
_object = objects;
}
Run Code Online (Sandbox Code Playgroud)
如何传递对象数组的构造函数值?
谢谢
params关键字是用于传递参数数组的语法糖。
方法如下:
public void MyMethod(params object[] args)
{
}
Run Code Online (Sandbox Code Playgroud)
可以通过以下两种方式调用,结果相同:
MyMethod(new object(), new object());
MyMethod(new []{ new object(), new object());
Run Code Online (Sandbox Code Playgroud)
当Unity查找构造函数时,它会看到一个带有一个type类型参数的构造函数object[]。因此,Unity提供的值必须是一个数组。
该InjectionConstructor还利用关键字参数,可以每个参数的值,以转发给自己的构造函数。如果InjectionConstructor使用数组实例化,它将尝试使用数组的每个元素并将它们转发给您的类构造函数。
要停止这种情况,我们需要两个包装级别,一个包装是为了统一为您的类提供一个数组,另一个包装是InjectionConstructor将第一个数组用作第一个也是唯一的参数。
因此,您应该使用以下内容:
container.RegisterType<IProviderContext, MockOrderServiceProviderContext>(
new InjectionConstructor(new []
{
new []
{
new Pharmacy { SiteId = 2, DistrictCode = "2" }
}
}));
Run Code Online (Sandbox Code Playgroud)
如果要传递其他项目,只需将它们添加到内部数组中即可:
container.RegisterType<IProviderContext, MockOrderServiceProviderContext>(
new InjectionConstructor(new []
{
new []
{
new Pharmacy { SiteId = 2, DistrictCode = "2" },
new Hospital { SiteId = 5, DistrictCode="2" }
}
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |