9

昨夜、新しいプロジェクトで 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 グループにも投稿)

4

1 に答える 1

10

私は自分の質問に答えるのが汚いと感じていますが、これに迷い込む可能性のある人の利益のために...

これは Ninject の問題ではありません。実際には Cassini (VS2k8 に組み込まれた Web サーバー) の問題であると思われます。これらの要求は、IIS とは異なる方法で処理されます。基本的な理由は、Cassini が MVC に送信する favicon.ico の要求をアプリが取得し、Ninject がその処理方法を知らなかったためです。

Ian Davis は、これに対するバグ修正を驚くほど短時間で行いました。また、特に開発中にこの問題を回避するために、無視ルートを追加することを推奨しました。ルート構成に次を追加するだけです。

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

これが誰かを助けることを願っています!

于 2010-03-28T14:55:13.947 に答える