Ich würde gerne in der Lage sein, ninjects zu verwenden, um alle Instanzen eines bestimmten generischen Typs in eine Klasse zu injizieren. Zum Beispiel habe ich eine Reihe von benutzerdefinierten Extraktoren von einem Format ähnlich zu:Ninject Injection aller Instanzen eines generischen Typs mit Ninject
public interface IExtract<TEntity>
{
TEntity ExtractFrom(MyBulkExportedEntity exportedEntity);
}
und ich möchte alle Instanzen dieser Extraktoren in eine Klasse für die Bearbeitung dieser Datei mit ninject mehr Bindungs verantwortlich injizieren.
dh
public class ProcessDataExtract
{
/*This isn't valid c# but demonstrates the intent of what i would like to do*/
public ProcessDataExtract(IEnumerable<IExtract<>> allExtractors)
{
}
public void Process(MyBulkExportedEntity exportedEntity)
{
/*loop through all of the extractors and pull relevant data from the object*/
}
}
In der Vergangenheit habe ich dies getan, indem eine Verwaltungsklasse mit (IProvideExtractors), die direkt den Kernel zugreift, aber Ich mag diese Methode nicht und wurde gefragt, ob jemand einen besseren Weg kennt um dies zu tun. Mit ninject mehrere Bindung Ich kann dann bekommen alle Instanzen kernel.GetAll(typeof(IExtract<>))
Im Inneren des 'Process' Methode ist es erforderlich für die IEtract 'generisch sein? Wenn nicht, dann würde ich ein nicht generisches 'IExtract' erstellen und' IExtract 'würde von' IExtract' erben. Und mit der richtigen Registrierung in Ihrem 'ProcessDataExtract'-Konstruktor würden Sie sich auf' IEnumerable allExtractors 'verlassen. –
nemesv