2012-03-19 6 views
1

My ASP.NET MVC 3アプリケーションはNinject IoCコンテナを使用します。コントローラーの1つは、データ・プロバイダーに依存します。これは、Webサイトの開始時に潜在的に必要なもののキャッシュを開始する必要があります。コントローラーが要求に応じて作成され、データが必要な場合は不要です。モジュールロード時にシングルトンスコープの依存関係のインスタンスを作成するようにカーネルに依頼する

このため、私は依存関係のシングルトンスコープインスタンスを作成するようにNinjectに依頼する必要があります。これは、サイト開始時のリク​​エストをフィードすることになります。

どうすればいいですか?

答えて

1

NinjectHttpApplicationが提供するアプリケーションの開始オーバーライドでglobal.asaxの操作を実行するだけです。 global.asaxで標準のHttpApplicaiton(NinjectHttpApplicationオーバーライドなし)を使用している場合は、通常のHttpApplication_Startイベントを使用してキャッシュの初期化を行います。 IoCコンテナにこのコンテキストで触れることは、アプリケーションの複合ルートであるため、受け入れ可能です。だから私のようなものを推測:私は本当にそれはこれよりももっと複雑であるためにの必要性を参照してくださいいけない

Bind<IProvider>().To<CacheProvider>().InSingletonScope(); //<in binding module 

Kernel.Get<IProvider>().SetupCache() //<in global.asax 

を...でも、私は間違っている可能性があります。

プロバイダに関する詳細を提供できる場合は、より具体的な提案をすることができます。

0

カーネル内のマッピングに.InSingletonScope()を追加します。この方法では、常に同じオブジェクトを使用します。オブジェクトが必要になるとすぐに、Ninjectはそれをロードし、その後常に同じオブジェクトを使用します。

+0

ありがとうございますが、サイトの開始時に依存関係を取得する方法を知る必要があることを明示しました。私はシングルトンスコープの依存関係を作成する方法を認識しています。今はGlobal.asaxで 'DependencyResolver.Current.GetService'を呼び出しています。 –

+0

次に、これをロードするコールを行う必要があります。つまり、オブジェクトが必要なときにロードされると言ったときの意味です。あなたがそれを使用していないなら、そうでなければインスタンス化する必要はありません。 –

関連する問題