otrzymuje następujące interfejs:wstrzykiwanie przeliczalny zawierający wszystkie zarejestrowane implementacje w interfejs
public interface IMyProcessor
{
void Process();
}
Chciałbym, aby móc zarejestrować wiele wdrożeń i mają mój DI kontener wstrzykiwania przeliczalny z nimi do klasy jak to:
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();
}
}
}
Czy to możliwe? Moja obecna implementacja MyProcessorLibrary
wyszukuje statycznie wszystkie implementacje IMyProcessor
, ale wolałbym to zrobić przez kontener, jeśli mogę. Używam Unity, ale jestem ciekawy, czy wspierają go inne pojemniki.
Edit:
Dzięki za odpowiedzi tak daleko; dla jasności chcę wstrzyknąć MyProcessorLibrary
do innej klasy i zbudować ją jako część okablowania drzewa obiektów zależnych, np.
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>();
możliwe duplikat [Rozwiązywania IEnumerable z Unity] (http: // stackoverflow.com/questions/1961549/resolving-ienumerablet-withunity) –