Если у меня есть класс с ctor, настроенным для множественной инъекции, например:
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>()
похоже, что он должен только ограничивать привязку, к которой он применяется, и не влиять на другие привязки. Я считаю такое поведение вводящим в заблуждение.
Может кто-нибудь объяснить, что здесь происходит?
IWeapon
был привязан кSword
. Почему привязкаIWeapon
кDagger
в конкретном случае предотвращает общую привязку? Это означает, что я могу написать код, который создает конкретную привязку и нарушает более общие привязки, созданные где-то еще. Это кажется опасным и нелогичным. - person James World   schedule 04.09.2011WhenInjectedInto
, не так ли? Я новичок в ninject, но, насколько я понимаю, цель этой функции - иметь дело с конкретными случаями, как вы упомянули, обработанными. Вы хотите, чтобыIWeapon
был привязан кSword
в целом; однако при введении вShogun
вы хотите, чтобы он был привязан кDagger
. Если вы хотите, чтобы вShogun
были введены иSword
, иDagger
,WhenInjectedInto
не следует использовать, ИМХО. - person virtualmic   schedule 04.09.2011Dagger
илиSword
), а не к контракту (то естьIWeapon
), а не как к сообщению, когда вводите IWeapon в Shogun, вводите кинжал. Читать таким образом имеет смысл. - person James World   schedule 04.09.2011Bind<IWeapon>().To<BoStaff>().When(x => true);
Это не упоминаетShogun
, но все же появляется в мульти-инъекции, когдаSword
этого не делает. - person James World   schedule 04.09.2011