2012-04-23 22 views
18

¿Algún buen ejemplo de usar Ninject con un servicio de Windows? No estoy seguro de qué pasa si necesito alguna extensión. Además, ¿no está seguro de cuál debería ser la Raíz de Composición? ¿Algún buen ejemplo de usar Ninject con un servicio de Windows?Usando Ninject con un servicio de Windows

Respuesta

19

Un servicio de Windows no difiere mucho de una aplicación de línea de comando normal con respecto a la inyección de dependencia. La raíz de composición directa es su método Main.

La forma en que generalmente lo he hecho es crear el StandardKernel allí con un módulo en el que se resuelven mis dependencias. A continuación, utilice kernel.Get para resolver las dependencias de primer nivel - todo lo demás seguirá a partir de ahí:

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

¿Tiene Microsoft una forma de inyectar módulos Ninject (o kernel) más arriba para que no tenga que hacer ningún servicio de localización? (No es un gran problema solo por un par de dependencias, solo curiosidad) –

+0

No. No es que estés comenzando como una aplicación de consola. Podría hacer una aproximación de patrón de fábrica abstracta (o método de fábrica) para crear su servicio, si necesita hacerlo. –

+0

Dan, el método principal es el punto de partida. Las soluciones para aplicaciones web, etc. son en realidad soluciones temporales porque una aplicación web no tiene un buen punto de partida. –

1

Usando Ninject con TopShelf .. ejecutar vs instalar (iniciar) me enfrentaba a un problema extraño donde > MyService.exe run funciona bien con el código Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

Pero cuando inicio el servicio después de la instalación mediante > MyService.exe install

que no pudo resolver los enlaces mencionados en la exploración de montaje Ninject.

Después de unas horas de romper la cabeza ...

cambiar el .From(...)-.FromAssembliesMatching(...) que podría iniciar el servicio con éxito.

Espero que ayude a alguien.

Cuestiones relacionadas