昨夜、新しいプロジェクトで File -> New Project を実行しました。ああ、緑の野原の匂い。
私はリリースされたばかりの ASP.NET MVC 2 (つまり、プレビューもリリース候補もありません) を使用しており、MVC 拡張機能を備えた Ninject 2 (これもリリース バージョン) を使用して良いスタートを切ることができると考えていました。MVC 拡張プロジェクトをダウンロードし、VS2008Sp1 で開き、リリース モードでビルドしてから、mvc2\build\release フォルダーに移動し、Ninject.dll と Ninject.Web.Mvc.dll をそこからライブラリー フォルダーにコピーしました。プロジェクト (ソース管理でそれらを持ち歩き、いつでもどこでも適切なバージョンを使用できるようにするため)。対応する .xml ファイルを含めませんでした。インテリセンスやその他の機能を提供するだけですか? 大したことではないと私は信じています。
とにかく、私は見つけた最新のアドバイスに従いました。MVC2 プロジェクトで DLL を参照してから、Global.asax.cs の作業に取り掛かりました。まず、NinjectHttpApplication から継承させました。Application_Start() メソッドを削除し、代わりに OnApplicationStarted() をオーバーライドしました。その方法は次のとおりです。
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
また、VS のアドバイスに従い、CreateKernel メソッドを実装しました。
protected override Ninject.IKernel CreateKernel()
{
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
return new StandardKernel();
}
それだけです。プロジェクトへのその他の変更はありません。
上記の 2 か所で RegisterAllControllersIn() メソッドがコメント アウトされていることがわかります。私はそれを 3 つの異なる組み合わせで実行できると考えましたが、そのすべてにファンキーな副作用があります。
- 上記のように実行します。
次に、標準の「ASP.NET MVC へようこそ」ページが見事に表示されます。ただし、このページがブラウザーに正しく表示された後、VS はスローされた例外を表示します。controllerType パラメーターに NULL 値を指定して呼び出された NinjectControllerFactory.GetControllerInstance() をスローします。これは、/Home ページがレンダリングされた後に発生することに注意してください。再度呼び出される理由はわかりませんが、ブレークポイントを使用することで、HomeController に対して GetControllerInstance() が正常に呼び出されたことを既に確認しています。controllerType を null としてこの新しい呼び出しを行うのはなぜですか? 本当にわからない。この時点で F5 を押すとブラウザに戻りますが、何の不満もありません。
- CreateKernel() の RegisterAllControllersIn() メソッドのコメントを外す
これは、物事が本当にファンキーになり始めているところです。これで 404 エラーが発生します。RegisterAllControllersIn() 行で ArgumentNullException が発生することもありますが、これは非常にまれであり、再現できませんでした。
- OnApplicationStarted() の RegisterAllControllers() メソッドのコメントを外す
(そして、CreateKernel() 内のコメントにコメントを戻します)
ポイント1とまったく同じように見える動作になります。
永遠に続くことを避けるために、Ninject 2 (どちらもベータ版以外のリリース バージョン) を使用して MVC 2 プロジェクトをセットアップし、Ninject によって提供されるコントローラーを取得する方法に関する正確なステップバイステップ ガイドはありますか? もちろん、インジェクション用の実際のもの (ISession オブジェクトやリポジトリ、ロガーなど) の提供を開始しますが、これを最初に機能させると思いました。
どんな助けでも大歓迎です!
(Ninject Google グループにも投稿)