11

次のようなマルチインジェクション用に設定された 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>()適用されるバインディングのみを制約し、他のバインディングには影響を与えないように見えます。この振る舞いは非常に誤解を招くと思います。

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

4