11

Böyle çoklu enjeksiyon için kurulmuş bir ctor sahip bir sınıf varsa:Ninjenin çoklu enjeksiyonu, düşündüğüm kadar aç gözlü değil! Nasıl olur?

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

Ve bu kadarını bağlamaları: Ben Shogun hem inşa edilecek beklenebilir

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

silahlar enjekte edildi mi? Ama durum böyle değil - sadece Hançeri alır.

Ben bir başka böyle bağlayıcı eklerseniz:

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

Sonra Shogun Dagger ve Shuriken alır. WhenInjectedInto<T>() sadece diğer bağlayıcıları etkilemeyen ve diğer bağlayıcıları etkilemeyen bağlayıcıyı sınırlandırıyor gibi görünüyor. Bu davranışı çok yanıltıcı buluyorum.

Birisi burada neler olduğunu açıklayabilir mi?

+0

Üzgünüm ama neden (ilk durumunda) Shogun beklediğiniz her iki silah açıkça Hançer, hiç IWeapon bağlama sorduklarında enjekte edildiğinde, enjekte inşa edilecek Shogun? – virtualmic

+0

Çünkü “IWeapon” ın “Kılıç'a” bağlı olmasını istedim. Belli bir durumda 'IWeapon''ı' Dagger'’e bağlama neden genel bağları engeller? Bu, belirli bir bağlama yapan ve başka yerlerde daha genel bağları kıran kod yazabileceğim anlamına gelir. Tehlikeli ve karşı sezgisel görünüyor. –

+1

Ama bu 'WhenInjectedInto' amacı yendi değil mi? Sindirmek için yeniyim, ama anladığım kadarıyla, bu özelliğin amacı, bahsettiğiniz gibi, özel durumlara sahip olmaktır. “IWeapon” ın genel olarak “Kılıç” a bağlı olmasını istersiniz; Ancak, Shogun'a enjekte edildiğinde, “Hançer” e bağlı olmasını istersiniz. Eğer Shogun'un hem “Kılıç” hem de “Hançer” enjekte olmasını istiyorsanız, “WhenInjectedInto” kullanılmamalıdır, IMHO. – virtualmic

cevap

İlgili konular