Alle guten Beispiele für die Verwendung von Ninject mit einem Windows-Dienst? Ich bin mir nicht sicher, ob Erweiterungen nötig sind. Auch nicht sicher, was die Composition Root sein sollte? Gibt es gute Beispiele für die Verwendung von Ninject mit einem Windows-Dienst?Verwenden von Ninject mit einem Windows-Dienst
Antwort
Ein Windows-Dienst unterscheidet sich nicht wesentlich von einer regulären Befehlszeilenanwendung hinsichtlich der Abhängigkeitsinjektion. Der einfache Kompositionswurzel ist Ihre Main
Methode.
Die Art, wie ich es normalerweise getan habe, ist die StandardKernel
dort mit einem Modul, in dem meine Abhängigkeiten aufgelöst werden. Dann kernel.Get
verwenden, um die Top-Level-Abhängigkeiten zu lösen - alles andere von dort folgen:
static void Main(string[] args)
{
var kernel = new StandardKernel(new FooModule());
var barDependency = kernel.Get<Bar>();
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new FooService(barDependency) };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
Mit Ninject mit Topshelf .. laufen vs installieren (Start) konfrontiert ich ein seltsames Problem, bei dem > MyService.exe run
funktioniert gut mit dem Code Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }
Aber wenn ich starten sie den Dienst nach > MyService.exe install
mit der Installation nicht die Bindungen in Ninject Montage Scannen erwähnt lösen könnte.
Nach ein paar Stunden den Kopf zu brechen ...
Ändern der .From(...)
-.FromAssembliesMatching(...)
i den Dienst erfolgreich starten konnte.
Ich hoffe, es hilft jemandem.
Hat Microsoft eine Möglichkeit, Ninject-Module (oder den Kernel) höher zu injizieren, so dass Sie keine Service-Lokalisierung durchführen müssen? (keine große Sache für nur ein paar Abhängigkeit - nur neugierig) –
Nein. Nicht, dass Sie ähnlich wie eine Konsolen-App starten. Sie können eine abstrakte Factory-Methode (oder Factory-Methode) für die Erstellung Ihres Service verwenden, wenn Sie dies tun müssen. –
Dan, ist die Main-Methode der Ausgangspunkt. Die Lösungen für Webanwendungen usw. sind eigentlich Umgehungslösungen, da eine Webanwendung keinen guten Ausgangspunkt hat. –