params 关键字是传递参数数组的语法糖。
以下方法:
public void MyMethod(params object[] args)
{
}
可以通过以下两种方式调用,结果相同:
MyMethod(new object(), new object());
MyMethod(new []{ new object(), new object());
当 Unity 查找构造函数时,它会看到一个具有一个类型参数的构造函数object[]
。所以Unity提供的值一定是数组。
还使用InjectionConstructor
了 params 关键字,其中每个参数都是要转发给您自己的构造函数的值。如果您InjectionConstructor
使用数组实例化 ,它将尝试使用数组的每个元素并将它们转发给您的类构造函数。
为了阻止这种情况,我们需要两个级别的包装,一个用于统一为您的类提供一个数组,另一个用于InjectionConstructor
使用第一个数组作为第一个也是唯一的参数。
所以你应该使用以下内容:
container.RegisterType<IProviderContext, MockOrderServiceProviderContext>(
new InjectionConstructor(new []
{
new []
{
new Pharmacy { SiteId = 2, DistrictCode = "2" }
}
}));
如果您想传递其他项目,只需将它们添加到内部数组:
container.RegisterType<IProviderContext, MockOrderServiceProviderContext>(
new InjectionConstructor(new []
{
new []
{
new Pharmacy { SiteId = 2, DistrictCode = "2" },
new Hospital { SiteId = 5, DistrictCode="2" }
}
}));