11
私はこのようなマルチ噴射用に設定ctorの持つクラスを持っている場合

は:Ninjectマルチインジェクションは私が思ったほど貪欲ではありません!どうして?

public Shogun(IEnumerable<IWeapon> allWeapons) 
{ 
    this.allWeapons = allWeapons; 
} 

そして、このように設定バインディング:

Bind<IWeapon>().To<Sword>(); 
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>(); 

は、それから私は、将軍は、両方の武器を構築することを期待します注入?しかし、これは事実ではありません - それはダガーを取得するだけです。

私はこのような結合をさらに追加する場合:

Bind<IWeapon>().To<Sword>(); 
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>(); 
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto<Shogun>(); 

その後将軍は短剣と手裏剣を取得します。それだけで、それが適用される結合制約や他のバインディングに影響を与えないべきであるようにWhenInjectedInto<T>()が見えます。私はこの動作が非常に誤解を招くことがわかります。

誰かがここで何が起こっているかを説明できますか?

+0

に固定しています私は申し訳ありませんが、に注入するときに、明示的に、ダガーにIWeaponをバインドするために求めているとき、なぜあなたは、(最初​​のケースでは)将軍が注入され、両方の武器を構築することを期待します将軍? – virtualmic

+0

私は 'IWeapon'が' Sword'に縛られるように求めたので。特定のケースで 'IWeapon'を' Dagger'にバインドすると、一般的なバインディングが妨げられるのはなぜですか?つまり、特定のバインディングを作成し、より一般的なバインディングを他の場所で作成するコードを記述することができます。それは危険で直観的ではないようです。 –

+1

しかし、それは 'WhenInjectedInto'の目的を破るだろうか?私は念頭に置いていますが、わかっている限り、この機能の目的は、あなたが言及したように、特定のケースを処理することです。あなたは 'IWeapon'が一般的に' Sword'に縛られることを望みます。しかし、「将軍」に注入されたとき、あなたはそれを「短剣」に束縛したい。 'Shogun'に' Sword'と 'Dagger'の両方を注入したい場合は、' WhenInjectedInto'を使うべきではありません。 – virtualmic

答えて

13
+0

+1すぐにターンアラウンド! –

+1

だから私は間違っていた! (質問へのコメント)。質問、ジェームスと清算のおかげで、レモ! – virtualmic

+0

いい仕事です!私はそれが設計ではなくバグであったことを安心しています! –

関連する問題