2013-03-11 18 views
7

Tôi mới sử dụng Autofac (3) và đang sử dụng nó để tìm một số lớp trong một số hội đồng triển khai IRecognizer.Có thể tiêm một danh sách các đối tượng được giải quyết vào một hàm tạo bằng cách sử dụng Autofac không?

Vì vậy, tôi có:

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

đó là tốt.

Nhưng tôi muốn tiêm tham chiếu đến các thành phần tìm thấy vào một constructor - loại:

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

Có cách nào để làm điều này?

Trả lời

13

Autofac hỗ trợ IEnumerable<T> như một relationship type:

Ví dụ, khi Autofac được tiêm một tham số nhà xây dựng kiểu IEnumerable<ITask> nó sẽ không tìm kiếm một thành phần cung cấp IEnumerable<ITask>. Thay vào đó, vùng chứa sẽ tìm thấy tất cả các triển khai của ITask và tiêm tất cả chúng.

Vì vậy, thay đổi nhà xây dựng của bạn để:

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

Perfect, cảm ơn bạn rất nhiều. – n4cer500

Các vấn đề liên quan