次のようなマルチインジェクション用に設定された ctor を持つクラスがある場合:
public Shogun(IEnumerable<IWeapon> allWeapons)
{
this.allWeapons = allWeapons;
}
そしてバインディングは次のように設定されます:
Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
それでは、両方の武器が注入された状態で Shogun が構築されると思いますか? しかし、これは当てはまりません。ダガーしか取得できません。
次のようなバインディングをさらに追加すると:
Bind<IWeapon>().To<Sword>();
Bind<IWeapon>().To<Dagger>().WhenInjectedInto<Shogun>();
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto<Shogun>();
その後、将軍は短剣と手裏剣を手に入れます。WhenInjectedInto<T>()
適用されるバインディングのみを制約し、他のバインディングには影響を与えないように見えます。この振る舞いは非常に誤解を招くと思います。
誰かがここで何が起こっているのか説明できますか?