Với giao diện sau:Tiêm một Enumerable chứa tất cả Triển khai đăng ký của một Interface
public interface IMyProcessor
{
void Process();
}
Tôi muốn để có thể đăng ký nhiều triển khai và có chứa DI tôi tiêm một đếm được của họ vào một lớp học như này:
public class MyProcessorLibrary
{
private readonly IMyProcessor[] _processors;
public MyProcessingThing(IMyProcessor[] processors)
{
this._processors = processors;
}
public void ProcessAll()
{
foreach (var processor in this._processors)
{
processor.Process();
}
}
}
Điều này có thể? Việc triển khai hiện tại của tôi là MyProcessorLibrary
tra cứu tất cả các triển khai IMyProcessor
tĩnh, nhưng tôi muốn thực hiện nó thông qua một vùng chứa nếu có thể. Tôi đang sử dụng Unity, nhưng tôi tò mò nếu các container khác hỗ trợ nó.
Edit:
Cảm ơn câu trả lời cho đến nay; rõ ràng là tôi muốn tiêm MyProcessorLibrary
vào một lớp khác, và để nó được xây dựng như một phần của việc nối dây lên cây của các đối tượng phụ thuộc, ví dụ:
public class MyProcessorRepository
{
public MyProcessorRepository(MyProcessorLibrary processorLibrary)
{
}
}
public class MyProcessorService
{
public MyProcessorService(MyProcessorRepository processorRepository)
{
}
}
var container = new UnityContainer();
// Register a bunch of IMyProcessors...
var service = container.Resolve<MyProcessorService>();
thể trùng lặp của [Giải quyết IEnumerable với Unity] (http: // stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity) –