Ich verwende Ninject, um Abhängigkeiten aufzulösen, und es funktioniert bis jetzt flüssig. In diesem Beispiel benötige ich eine Liste von Objekten, die basierend auf Daten in meiner App.config initialisiert wurden.Konfigurieren von Ninject zum Zurückgeben einer Ergebnisliste
Ninject gibt jedoch eine leere Liste zurück. Der folgende Ausschnitt ist ein Beispiel dafür, was ich versucht habe. Ich habe die Konstruktoren für die Klassenhierarchie für einen bestimmten Kontext eingefügt.
public ServiceSchedulerBuilder(IList<ITextExportService> textExportServices)
{
_textExportService = textExportServices;
}
public TextExportService(IHotFolderManager hotFolder)
{
_hotFolder = hotFolder;
}
public HotFolderManager(string baseFolderPath, string defaultFileSearchPattern)
{
//Some IO
}
//In a Ninject AppModule...
Kernel.Bind<IList<ITextExportService>>().ToMethod(ctx =>
{
var services = new List<ITextExportService>();
foreach (var device in GetDevicesByEnvironment())
{
var service = ctx.Kernel.Get<ITextExportService>(new ConstructorArgument("hotFolder", ctx.Kernel.Get<IHotFolderManager>(
new ConstructorArgument("baseFolderPath", device.Path),
new ConstructorArgument("defaultFileSearchPattern", "*.jmf"))));
services.Add(service);
}
return services;
});
Ich vermute, das alles kommt von der Tatsache, dass ich nicht explizit haben eine selbst für ITextExportService registriert Bindung. Da die Implementierung jedoch von Daten aus App.config abhängig sein wird, kann ich nicht nachvollziehen, wie ich sie registrieren kann und nicht jedes Mal dieselbe Instanz erhalte, wenn ich nach einer Liste dieses Typs frage.
Wow, sehr interessant. Es funktioniert, obwohl ich die konkrete 'NoMultiBindingList' benutzen muss, weil sie, wie definiert, nicht weiß, wie man von einer NoMultibindingList in INoMultibindingList konvertiert und Ninject ist unglücklich darüber. – Killnine
Ich habe eine Bearbeitung vorgenommen, um von INoMultieBindingList zu erben, das das Problem behoben hat. –
Killnine
@Killnine Entschuldigung, ich habe vergessen, die Schnittstelle 'INoMultiBindingList' zu 'NoMultiBindingList ' hinzuzufügen - deshalb wurde es nicht kompiliert. Ich habe den Code angepasst. EDIT: oops, sollte die Seite neu geladen haben bevor der Kommentar gepostet wird ;-) –
BatteryBackupUnit