2012-04-12 21 views
0

Ninject(NuGetインストール)を使用しているASP.NET MVC 3プロジェクトがあります。私は非MVCオブジェクトに依存性を注入するためにどのように使用できるかを理解しようとしています。ASP.NET MVCアプリケーションでNinjectを非MVCオブジェクトに使用する方法

次のようなコードがあります。どのようにNinjectを使って、以下のオブジェクトのIStoreの具体的なインスタンスを取得できますか? Global.asaxの中

public class SomeObject 
{ 
    private static IStore _store; 

    public static IStore CurrentStore 
    { 
     get 
     { 
      if (_store == null) 
      { 
       // Get Instance of _store. 
      } 
      return _store; 
     } 
    } 
} 

protected Application_BeginRequest() 
{ 
    IStore store = SomeObject.CurrentStore; 
} 

NinjectWebCommon.csで:

private static void RegisterServices(IKernel kernel) 
    { 
     // Module that binds a concrete type of IStore. 
     kernel.Load<WebModule>(); 
    } 

答えて

1

最も簡単な方法を扱う要求するためには、Global.asaxのではなく、それをしないでIHttpModule。あなたはHttpModuleをのためのバインディングを追加する場合がありますが、コンストラクタの引数としての依存関係をとることができます。

Bind<IHttpModule>().To<MyHttpModule>(); 
+0

このメソッドはうまく動作しますが、ヌルの_storeをチェックしてモジュールの値を設定する必要があり、リクエストごとに実行されるという点が異なります。よりクリーンな方法がありますか? –

0

これはDIコンテナ& Webアプリケーションとの間の境界を混乱させるように見えます。

おそらく、ストアを取得するクラスが必要です。このクラスは、実際にストアをどこから取得するかを決定できます。起動時に呼び出すことのできる初期化ルーチンもあります。

このようにして、NinjectモジュールはWebアプリケーションコードを取得せず、状況に応じてストアをロードする方法を設定します(たとえば、テストは本番とは異なる場合があります)。

関連する問題