2012-04-23 8 views
18

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

19

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); 
} 
+1

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) –

+0

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. –

+0

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. –

1

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.

Verwandte Themen