Учитывая следующий интерфейс:
public interface IMyProcessor
{
void Process();
}
Я бы хотел иметь возможность зарегистрировать несколько реализаций и сделать так, чтобы мой DI-контейнер вставлял перечисляемый из них в класс, подобный этому:
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();
}
}
}
Возможно ли это? Моя текущая реализация MyProcessorLibrary
ищет все реализации IMyProcessor
статически, но я бы предпочел сделать это через контейнер, если смогу. Я использую Unity, но мне любопытно, поддерживают ли другие контейнеры это.
Edit:
Спасибо за ответы до сих пор; чтобы быть понятным, я хочу внедрить MyProcessorLibrary
в другой класс и создать его как часть связывания дерева зависимых объектов, например,
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>();