2013-03-11 11 views
7

Jestem nowy w Autofac (3) i używam go do znalezienia szeregu klas w kilku złożeniach, które implementują IRecognizer.Czy można wstawić listę rozdzielonych obiektów do konstruktora przy użyciu Autofac?

Więc mam:

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

co jest w porządku.

Ale chciałbym, aby wprowadzić odwołania do elementów znajdujących się w konstruktora - rodzaj:

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

Czy istnieje jakiś sposób, aby to zrobić?

Odpowiedz

13

Autofac obsługuje IEnumerable<T> jako relationship type:

Na przykład, gdy Autofac jest wstrzykiwanie parametr konstruktora typu IEnumerable<ITask> to nie będzie wyglądać dla składnika, który dostarcza IEnumerable<ITask>. Zamiast tego kontener znajdzie wszystkie implementacje i wstrzyknie je wszystkie.

Więc zmienić konstruktora:

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

Perfect, bardzo dziękuję. – n4cer500