0

Ninject(NuGetインストール)を使用したASP.NETMVC3プロジェクトがあります。これを使用して、MVC以外のオブジェクトに依存関係を挿入する方法を理解しようとしています。

以下のようなコードがあります。Ninjectを使用して、以下のオブジェクトでIStoreの具体的なインスタンスを取得するにはどうすればよいですか?

public class SomeObject
{
    private static IStore _store;

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

Global.asaxの場合:

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>();
    }
4

2 に答える 2

1

リクエスト処理の最も簡単な方法は、global.asaxではなく、IHttpModuleで行うことです。そこで、HttpModuleのバインディングを追加すると、依存関係をコンストラクター引数として使用できます。

Bind<IHttpModule>().To<MyHttpModule>();
于 2012-04-12T15:07:45.173 に答える
0

これは、DIコンテナとWebアプリの境界を混乱させているようです。

おそらく必要なのは、ストアを取得するためのクラスです。このクラスは、実際にストアを取得する場所を決定できます。また、起動時に呼び出すことができる初期化ルーチンも含まれています。

このように、Ninjectモジュールはその中にWebアプリコードを取得しません。コンテキストに基づいてストアをロードする方法を構成できます(たとえば、テストは本番環境とは異なる場合があります)。

于 2012-04-16T13:49:39.250 に答える