的params關鍵字是傳遞的參數數組語法糖相匹配。
下面的方法:
public void MyMethod(params object[] args)
{
}
可以在兩個具有相同的結果通過以下方式調用:
MyMethod(new object(), new object());
MyMethod(new []{ new object(), new object());
當團結查找構造函數,它看到一個構造函數的一個參數鍵入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" }
}
}));
感謝關於params和injectionconstructor的解釋 – JoR 2013-03-01 14:29:41
@JoR沒問題,我希望它有道理 – Lukazoid 2013-03-01 14:32:34
非常有幫助的解釋,甚至3年後! – brazilianldsjaguar 2016-07-09 00:27:22