5

必要なものを正確に把握するためにドキュメントに苦労しています。とにかく、ドキュメントは(私の理解では)1.5用です。

注意: NinjectHttpApplication を拡張したくありません

Application_Start()でNinejctControllerFactoryを使用するように構成しましたが、コントローラーを作成しようとすると、 KernelContainer.Kernelで null 参照例外が発生します。NinjectHttpApplication を拡張しない場合、どこでカーネルを設定すればよいですか?

4

4 に答える 4

5

すでに別の HttpApplication 派生クラスを拡張しているので、関連するソース コードをNinjectHttpApplicationクラスから拡張 HttpApplication クラスにコピーするだけでよいと思います。カット アンド ペーストするのではなく、ここでNinject2 Ninject.Web.Mvc 拡張プロジェクトの NinjectHttpApplicationソースを参照してください。

具体的には、 Application_Start()およびApplication_Stop()メソッド内のものをコピーします。コントローラーを登録する他の方法も便利ですが、コントローラーを好きなように登録できます。Application_Start()でわかるように、カーネルは純粋仮想関数 CreateKernel() を呼び出すことによって作成されますカーネルはインラインで作成できます。さらに、NinjectHttpApplicationクラスに Kernel プロパティが存在することに注意してください。これを独自のクラスにもコピーします。ここでの意図は、HttpApplication 派生クラスが KernelContainer として効果的に機能することであると思われます。

免責事項:私はこれが機能するかどうかを確認するためにこれを試していませんが、すぐに試します. 私は Web プロジェクトで Ninject 1.x を使用しており、近い将来 Ninject 2 にアップグレードする予定です。ただし、NinjectHtppApplication から直接派生できる可能性があります。幸運を!

于 2009-06-18T13:58:36.873 に答える
2

このブログ記事を見てください。カーネルを構成する方法について実行する必要があるプロセスを明確にするのに役立つはずです。

http://www.kevinrohrbaugh.com/blog/2009/8/7/using-ninject-2-with-aspnet-mvc.html

于 2009-08-12T12:16:03.810 に答える
2

NinjectHttpApplication から派生できないことは大したことではありません。たいしたことはありませんが、とても便利です。Peter Meyer の提案は、進むべき道です。ここでソースをチェックしてください。ただし、IHaveKernel から継承する必要があります。

于 2009-09-14T07:51:56.837 に答える
0

あなたが持っているコードを貼り付けて、どこが間違っているのかを他の人が確認できるようにする必要があります。

このコードは Application_Start に配置する必要があると思います:

ControllerBuilder.Current.SetControllerFactory(typeof(NinjectControllerFactory));
KernelContainer.Kernel = new StandardKernel(
    new AutoControllerModule(Assembly.GetExecutingAssembly();
);
于 2009-06-07T20:09:33.810 に答える