2009-06-07 12 views
5

私は必要なものを正確に理解するためにドキュメントに苦労しています。とにかくドキュメントは私の理解では1.5です。Ninject 2をASP.NET MVCで動かすための良いガイドを知っている人はいますか?

NB:私はでのApplication_Start()NinejctControllerFactoryを使用するように設定したが、私はKernelContainer.Kernelにnull参照の例外を取得

私はNinjectHttpApplicationを拡張したくないコントローラを作成しようとすると、が表示されます。 NinjectHttpApplicationを拡張していない場合はどこでカーネルを設定しますか?

+0

NinjectHttpApplicationを拡張したくない理由は何ですか? –

+0

私は既に別のカスタムHttpApplicationを拡張しています – joshcomley

答えて

2

このブログ記事をご覧ください。これは、カーネルの設定方法を実行するために必要なプロセスを明確にするのに役立ちます。

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

+1

これはまだNinjectHttpApplicationから派生したものです。 –

+0

彼は延長を言うとき、彼は派生/継承を意味しますか? –

+0

それは私がそれをどのように解釈したかです。しかし、それは良い質問です。 –

0

あなたが間違っている可能性がある場所に人々が見えるように、あなたはまだコードを貼り付けるべきです。

私はこのコードがあなたのApplication_Startに置かれるべきだと思う:

ControllerBuilder.Current.SetControllerFactory(typeof(NinjectControllerFactory)); 
KernelContainer.Kernel = new StandardKernel(
    new AutoControllerModule(Assembly.GetExecutingAssembly(); 
); 
+0

私はこれまでコントローラの工場を設定しているという点で私のコードをかなり与えてくれました。それは1行でそれほど価値があるとは思われませんでした!また、これはNinjectのv1用です。私はv2に興味があります。 – joshcomley

+0

私は実際にコードや詳細なスタックトレースなど何も表示されません。解決策は明らかですので、あなたが少なくとも明白なことをしていることを確認したいと思います。私は2つの部分(本体を見ただけで1.5)を見逃してしまったので、私はNinject 2のために正しいと思って答えを更新しました。 – Talljoe

5

すでに別のHttpApplicationの派生クラスを拡張しているので、私の考えは、NinjectHttpApplicationクラスから関連するソースコードをただコピーすることです拡張されたHttpApplicationクラスに追加します。切り取って貼り付けるのではなく、Ninject2 Ninject.Web.Mvc拡張プロジェクトhereNinjectHttpApplicationsourceを見てください。

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

免責事項:私はすぐにでも動作するかどうかを確認するためにこれを試していません。私はWebプロジェクトでNinject 1.xを使用し、近い将来にNinject 2にアップグレードするつもりです。しかし、おそらくNinjectHtppApplicationから直接派生することができます。がんばろう!

2

がNinjectHttpApplicationから派生することができない大したことではありません。それはあまりあまりしていない、それは非常に便利です。ピーター・メイヤーの提案は道のりです。ソースhereをチェックしてください。あなたはIHaveKernelから継承する必要があります。

関連する問題