Data la seguente interfaccia:Iniettando un Enumerable contenente tutte le implementazioni registrati di un'interfaccia
public interface IMyProcessor
{
void Process();
}
mi piacerebbe essere in grado di registrare più implementazioni e avere il mio contenitore DI iniettare un enumerabile di loro in una classe come this:
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();
}
}
}
È possibile? La mia attuale implementazione di MyProcessorLibrary
ricerca tutte le implementazioni IMyProcessor
staticamente, ma preferirei farlo attraverso un contenitore se posso. Sto usando Unity, ma sono curioso di sapere se altri contenitori lo supportano.
Edit:
Grazie per le risposte finora; per essere chiari, voglio iniettare MyProcessorLibrary
in un'altra classe e farlo costruire come parte del cablaggio di un albero di oggetti dipendenti, ad es.
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>();
possibile duplicato di [Risoluzione IEnumerable con Unity] (http: // stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity) –