Учитывая следующий интерфейс:
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, но мне любопытно, поддерживают ли его другие контейнеры.
Изменить:
Спасибо за ответы; чтобы быть ясным, я хочу внедрить 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>();