2013-03-11 15 views
7

Sono nuovo di Autofac (3) e lo sto utilizzando per trovare un numero di classi in diversi assembly che implementano IRecognizer.E 'possibile iniettare un elenco di oggetti risolti in un costruttore utilizzando Autofac?

Così ho:

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).As<IRecognizer>(); 

che va bene.

Ma mi piacerebbe per iniettare i riferimenti ai componenti trovati in un costruttore - sorta di:

public Detector(List<IRecognizer> recognizers) 
{ 
    this.Recognizers = recognizers; 
} 

Esiste un modo per fare questo?

risposta

13

Autofac sostiene il IEnumerable<T> come relationship type:

Ad esempio, quando Autofac sta iniettando un parametro del costruttore di tipo IEnumerable<ITask> non cercherà un componente che fornisce IEnumerable<ITask>. Invece, il contenitore troverà tutte le implementazioni di ITask e le inserirà tutte.

Quindi cambiare il vostro costruttore per:

public Detector(IEnumerable<IRecognizer> recognizers) 
{ 
    this.Recognizers = new List<IRecognizer>(recognizers); 
} 
+1

Perfetto, vi ringrazio tanto. – n4cer500

Problemi correlati