11

Se ho una classe con un ctor impostato per il multi-iniezione in questo modo:La multi-iniezione Ninject non è così avida come avrei pensato! Come mai?

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

e attacchi impostati in questo modo:

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

Poi mi aspetterei Shogun ad essere costruito con entrambi armi iniettate? Ma non è questo il caso: prende solo il Dagger.

Se posso aggiungere un ulteriore legame come questo:

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

Poi Shogun ottiene il Pugnale e la Shuriken. WhenInjectedInto<T>() sembra che dovrebbe limitare il vincolo a cui è applicato e non influisce su altri collegamenti. Trovo questo comportamento molto fuorviante.

Qualcuno può spiegare cosa sta succedendo qui?

+0

Mi dispiace, ma il motivo per cui ci si aspetta Shogun (nel primo caso) per essere costruito con entrambe le armi iniettato, quando si esplicitamente stai chiedendo di legarsi IWeapon a Dagger, quando iniettato Shogun? – virtualmic

+0

Perché ho anche chiesto che 'IWeapon' sia associato a' Sword'. Perché nel caso specifico il binding di 'IWeapon' a' Dagger' impedisce il binding generale? Ciò significa che posso scrivere codice che crea un legame specifico e spezzare i collegamenti più generali creati altrove. Sembra pericoloso e contro-intuitivo. –

+1

Ma questo avrebbe battuto lo scopo di 'WhenInjectedInto', no? Sono nuovo di novice, ma per quanto ho capito, lo scopo di questa funzione è di avere casi specifici, come lei ha menzionato, gestiti. Vuoi che 'IWeapon' sia legato a' Sword' in generale; tuttavia, quando viene iniettato in 'Shogun', vuoi che sia legato a' Dagger'. Se vuoi che 'Shogun' abbia entrambi gli iniettori' Sword' e 'Dagger',' When InjectedInto' non deve essere usato, IMHO. – virtualmic

risposta

Problemi correlati