6

MVC3 プロジェクト用の Ninject のセットアップに関する記事をいくつか読みました。

Global.asax.cs はNinjectHttpApplicationから継承する必要があると言う人もいれば、Application_Start() を介してStandardKernelを構築するときにモジュールを登録する人もいます。

私は個人的に NuGet を使用しましたが、別の方法でAppStart_NinjectMVC3クラスを作成し、それを使用して起動しました

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.AppStart_NinjectMVC3), "Start")]

それぞれに利点/欠点はありますか?

4

2 に答える 2

6

Ian と私は、この数日間、このトピックに関してかなり忙しくしていました。統合されましたNinject.Web.Mvc。nuget パッケージから派生させる方法と、nuget パッケージをインストールするNinject.MVC3方法は 2 つあります。NinjectHttpApplicationしかし、現在は同じコードに基づいているため、同じ機能を備えています。詳細については、私のブログ投稿を参照してください。

http://www.planetgeek.ch/2011/02/22/ninject-mvc3-and-ninject-web-mvc3-merged-to-one-package/

于 2011-02-22T21:04:05.497 に答える
2

私は同じ質問に対する答えを探していましたが、自分でまともな答えを見つけたようです。そしてところで:私はMVC、Ninject、DI n00bなので、ここから離れている場合は遠慮なく私を撃ってください。しかし、私はそれをかなり理解していると思います。

「PreApplicationStartMethod」属性はすでにSystem.Webに存在し、Application_Start()の前でもメソッドを実行するために使用できます。つまり、すでにApplication_Start()でインジェクションを開始する必要がある可能性があるため、DIスタッフにとって非常に優れています。また、PreApplicationStartMethodを使用することで、インジェクションスタッフをApplication_Start()から除外し、それが最初に開始することを確認できます。アプリケーションが起動します。

問題は、Microsoftがこの属性でマークできるメソッドを1つだけ許可していることです。これは、設計上の欠陥であると彼らが認めていることです。そのため、この欠点を回避するためにWebActivatorクラスを作成しました。

複数のメソッドをPreApplicationStartMethodとしてマークできることの利点の1つは、初期化が必要なNuGetパッケージを、既存のコードに触れることなく、WebActivatorバージョンのPreApplicationStartMethod属性である種の初期化メソッドをマークするだけでアプリケーションに挿入できることです。

このメソッドは、Application_Start()でカーネルを構築するのとほとんど同じですが、Ninjectのものが先に開始されます。

NinjectHttpApplicationをオーバーライドすることで、HttpContextのバインドなど、多くの一般的なMVC関連のバインドジョブをNinjectに実行させることができます。WebActivavtor/ Application_Start()メソッドを使用すると、私が知る限り、これを自分で実行する必要があります。

いくつかの良いリンク:

于 2011-02-22T11:06:58.340 に答える