Dada la siguiente interfaz:la inyección de un Enumerable que contiene todas las implementaciones registradas de una interfaz
public interface IMyProcessor
{
void Process();
}
Me gustaría ser capaz de registrar varias implementaciones y tienen mi contenedor DI inyectar un enumerable de ellos en una clase como esto:
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();
}
}
}
¿Esto es posible? Mi implementación actual de MyProcessorLibrary
busca todas las implementaciones IMyProcessor
estáticamente, pero prefiero hacerlo a través de un contenedor si puedo. Estoy usando Unity, pero tengo curiosidad si otros contenedores lo soportan.
Editar:
Gracias por las respuestas hasta el momento; para ser claro, quiero inyectar MyProcessorLibrary
en otra clase, y hacer que se construya como parte del cableado de un árbol de objetos dependientes, p.
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>();
posible duplicado de [Resolución de IEnumerable con Unity] (http: // stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity) –