params キーワードは、引数の配列を渡すためのシンタックス シュガーです。
次の方法:
public void MyMethod(params object[] args)
{
}
次の両方の方法で呼び出すことができ、結果は同じです。
MyMethod(new object(), new object());
MyMethod(new []{ new object(), new object());
Unity がコンストラクターを探すとき、 type の 1 つのパラメーターを持つコンストラクターを見つけますobject[]
。したがって、Unity が提供する値は配列でなければなりません。
またInjectionConstructor
、params キーワードも使用します。各パラメーターは、独自のコンストラクターに転送する値です。を配列でインスタンス化するInjectionConstructor
と、配列の各要素を使用してクラス コンストラクターに転送しようとします。
これを止めるには、2 つのレベルのラッピングが必要です。1 つは Unity がクラスに配列を提供するためのもので、もう 1 つ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" }
}
}));