2012-04-23 12 views
18

Qualsiasi buon esempio di utilizzo di Ninject con un servizio di Windows? Non sono sicuro di cosa succederebbe se avessi bisogno di estensioni. Inoltre, non è sicuro di quale dovrebbe essere il Root di composizione? Qualche buon esempio di utilizzo di Ninject con un servizio Windows?Utilizzo di Ninject con un servizio di Windows

risposta

19

Un servizio Windows non differisce molto da una normale applicazione della riga di comando in relazione all'iniezione delle dipendenze. La radice di composizione diretta è il tuo metodo Main.

Il modo in cui l'ho fatto in genere è creare lo StandardKernel con un modulo in cui sono state risolte le mie dipendenze. Quindi utilizzare kernel.Get per risolvere le dipendenze di primo livello - tutto il resto seguirà da lì:

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

Microsoft ha un modo per iniettare i moduli di Ninject (o il kernel) più in alto in modo da non dover eseguire alcuna localizzazione di servizio? (non un grosso problema per solo un paio di dipendenze - solo curioso) –

+0

No. Non che tu stia iniziando molto come un'app per console. Potresti prendere un approccio modello astratto di fabbrica (o metodo di fabbrica) per creare il tuo servizio, se hai bisogno di farlo. –

+0

Dan, il metodo Main è il punto di partenza. Le soluzioni per le applicazioni Web, ecc. Sono in realtà soluzioni alternative perché un'applicazione Web non ha un buon punto di partenza. –

1

Utilizzando Ninject con TopShelf .. eseguire vs installare (start) ho affrontato un problema strano in cui > MyService.exe run funziona bene con il codice Kernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

Ma quando avvio il servizio dopo l'installazione utilizzando > MyService.exe install

che non ha potuto risolvere le associazioni di cui la scansione di assemblaggio Ninject.

Dopo qualche ora di rompere la mia testa ...

cambiare il .From(...)-.FromAssembliesMatching(...) ho potuto avviare il servizio con successo.

Spero che aiuti qualcuno.

Problemi correlati