Sono nuovo in StructureMap e ho un codice esistente con cui sto lavorando con StructureMap 2.5.4.StructureMap e iniezione di IEnumerable <T>
C'è una classe che viene costruita utilizzando StructureMap che ha un costruttore che prende come parametro IEnumerable<ICar>
.
Il registro ha il seguente codice.
Scan(x =>
{
x.TheCallingAssembly();
x.WithDefaultConventions();
x.AddAllTypesOf<ICar>();
}
);
ForRequestedType<IEnumerable<ICar>>().TheDefault.Is.ConstructedBy(
x => ObjectFactory.GetAllInstances<ICar>());
sto crei una prova di unità e hanno ottenuto un contenitore nidificata fuori ObjectFactory e hanno iniettato un'istanza utilizzando il metodo Iniettare. Una delle istanze di ICar dovrebbe ricevere il tipo iniettato nel suo costruttore. Tuttavia non funzionava e l'ho rintracciato fino alla chiamata ObjectFactory.GetAllInstances() che non utilizza il mio contenitore nidificato.
Come posso farlo funzionare?
Ho anche letto sugli array autowiring StructureMap e sulle istanze IEnumerable ma non sono riuscito a farlo funzionare.
Esiste un modo migliore per riscrivere il codice di registro sopra in modo che venga creata un'istanza di IEnumerable<ICar>
e che utilizzi il tipo immesso dal mio contenitore nidificato?
In alcuni posti si usa 'TCar' e altri si usa' ICar'. Qual è la loro relazione (e StructureMap sa della loro relazione)? –
Siamo spiacenti, sono la stessa cosa ... errore di battitura. – GiddyUpHorsey