私はサービスの複数の実装をバインドすると、一度に呼ばれるそれらのすべてを持っている:Ninjectマルチキャスト
var kernel = new StandardKernel();
kernel.Bind<IBreakfast>.To<Spam>();
kernel.Bind<IBreakfast>.To<Eggs>();
kernel.Bind<IBreakfast>.To<MoreSpam>();
kernel.Get<IBreakfast>().Eat(); // call Eat method on all three bound implementations
Ninjectはそれを好きではない、と複数のバインディングを持っていることについて例外がスローされます。そのエラーを回避し、すべての実装を呼び出す方法がありますか?
Bind<>
また、実行時にロードされる場合とロードされない場合があるため、呼び出しを行うための単一の実装を作成することはできません。これは、ASP.NET MVC 3 Webサイトのプラグインアーキテクチャの一部です。
(>私は仕事を得るとき、私は午前中にこれをみますが、Ninjectは、 'バインド<2番目の呼び出しでエラーがスローされません).To <>() '? – MikeWyatt
@MikeWyatt:いいえ、複数の「バインド」は問題ありません。良くない点は、 'Get'が 'Single'以上の項目を生成することです。 'GetAll '(または 'List '、 'T []'、または 'IEnumerable 'を使って複数の登録を暗黙的にバッチアップすることができます)テストが爆発するものはまだ載せていないからです!)。 Ninjectは暗黙のコンポジットを生成して、あなたが望むやり方で呼び出しをマルチキャストすることは何もありません。 –
これは素晴らしいです。ありがとう。 – MikeWyatt