2012-04-23 4 views
18

WindowsサービスでNinjectを使用する良い例はありますか?私が必要とする拡張機能がどういうものかは分かりません。また、Composition Rootはどのようなものでなければなりませんか?そこにWindowsサービスとNinjectを使用する任意の良い例ですか?WindowsサービスでNinjectを使用する

答えて

19

Windowsサービスは、依存関係注入に関して通常のコマンドラインアプリケーションとあまり変わりません。単純なコンポジションルートは、Mainメソッドです。

私が通常やったやり方は、自分の依存関係が解決されたモジュールでStandardKernelを作成することです。そして、トップレベルの依存関係を解決するためにkernel.Getを使用 - 他のすべてはそこから続く:

Ninjectを使用して
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

マイクロソフトでは、Ninjectモジュール(またはカーネル)を上位に注入してサービスを探す必要はありませんか? (ちょうど2つの依存のための大したことではない - ちょうど興味がある) –

+0

いいえ。コンソールアプリケーションのように起動しているわけではありません。必要な場合は、サービスを作成するための抽象ファクトリ(またはファクトリメソッド)パターンのアプローチをとることができます。 –

+0

Dan、Mainメソッドが出発点です。 Webアプリケーションなどのソリューションは実際には回避策です。なぜなら、Webアプリケーションには良い出発点がないからです。 –

1

TopShelfと...実行VSインストール(起動) 私は> MyService.exe run はコードで正常に動作奇妙な問題に直面しましたKernel.Bind(handlers => { var bindings = handlers.From("abc.dll") ... }

しかし、私はそれはNinjectアセンブリスキャンで述べたバインディングを解決できませんでした> MyService.exe install

を使用してインストールした後にサービスを開始します。私の頭を壊すの数時間後

...

.FromAssembliesMatching(...).From(...)を変更私は正常にサービスを開始することができます。

誰かを助けることを願っています。

関連する問題