NinjectModuleに、複数のアセンブリのすべてのインターフェイスのモックバインディングを設定するコードがあります。Ninject 2を使用すると、ラムダFrom()
内でメソッドを複数回呼び出すことができました。Scan
Kernel.Scan(scanner =>
{
string first = "MyAssembly";
Assembly second = Assembly.Load("MyAssembly");
scanner.From(first);
scanner.From(second);
scanner.BindWith<MockBindingGenerator>();
});
From()
Ninject 3の新しい方法では、私が知る限り、連鎖呼び出しは許可されていません。これは私が思いつくことができる最高の同等物です:
string first = "MyAssembly";
Assembly second = Assembly.Load("MyAssembly");
Kernel.Bind(x => x
.From(first)
.SelectAllInterfaces()
.BindWith<MockBindingGenerator>());
Kernel.Bind(x => x
.From(second)
.SelectAllInterfaces()
.BindWith<MockBindingGenerator>());
上記のように、1つのアセンブリが複数回読み込まれると、新しいコードが壊れます*。first
とsecond
変数は異なるタイプであるため、これらを単純に1つの呼び出しに結合することはできません。私の実際の製品コードにも同じ問題がありますが、もちろん、同じアセンブリ名を2回ハードコーディングしているだけではありません。
From()
では、上記を書き直して、複数の呼び出しを組み合わせて1回だけ呼び出すことができるようにするにはどうすればよいBindWith<>
ですか?
編集
*バインディングコード自体は問題なく実行されます。例外は、2回バインドされたアセンブリに存在するインターフェイスのインスタンスを取得しようとすると発生します。