Предвид следния интерфейс:
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>();