Если у меня есть класс с CTOR создан для нескольких инъекций, как это:Ninject multi-injection не так жадна, как я бы подумал! Как так?
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>();
Затем Shogun получает Кинжал и Shuriken. WhenInjectedInto<T>()
похоже, что это должно ограничивать привязку, к которой она применяется, и не влиять на другие привязки. Я считаю, что это поведение очень вводит в заблуждение.
Может кто-нибудь объяснить, что здесь происходит?
Я извиняюсь, но почему вы ожидали бы Shogun (в первом случае), который будет построен с впрыскивается как оружие, когда вы явно просят связать IWeapon с кинжалом, при введении в Shogun? – virtualmic
Потому что я также попросил 'IWeapon' привязаться к' Sword'. Почему привязка 'IWeapon' к' Dagger' в конкретном случае предотвращает общую привязку? Это означает, что я могу написать код, который создает специфическое связывание и разбивает более общие привязки, сделанные в другом месте. Это кажется опасным и противоречивым. –
Но это побьет цель «WhenInjectedInto», не так ли? Я новичок в ninject, но, насколько я понимаю, цель этой функции - иметь конкретные случаи, как вы уже упоминали, обрабатывать. Вы хотите, чтобы «IWeapon» привязывался к «Sword» вообще; однако при введении в «Сёгун» вы хотите, чтобы он был связан с «Кинжалом». Если вы хотите, чтобы «Shogun» вводил как «Sword», так и «Dagger», «WhenInjectedInto» не должен использоваться, IMHO. – virtualmic