11

これはばかげた質問かもしれませんが、私はNinjectソースを調べていますが、NInjectが独自のコントローラーファクトリを登録しているのを見ていません。また、アセンブリIControllerFactoryにクラスが表示されません。Ninject.Web.Mvc私は何かが足りないのですか?Ninjectはどのようにしてコントローラーを作成し、パラメーターをコンストラクターに挿入しますか?

4

3 に答える 3

13
  1. 「/Task/Index」を探しているとしましょう。
  2. Ninject MVCアプリケーションはDefaultControllerFactory、非Ninjectアプリケーションと同じように使用するようになりました。
  3. DefaultControllerFactoryコントローラのタイプを検索します(TaskController)。
  4. DefaultControllerFactoryと呼ばれる内部クラスがありDefaultControllerActivatorます。コントローラインスタンスを返す、DefaultControllerActivatorというメソッドがあります。タイプインスタンスを要求します。CreateDefaultControllerFactoryDefaultControllerActivatorTaskController
  5. DefaultControllerActivator.Createを使用しIDependencyResolverます。これがNinject出番です。Ninject独自のリゾルバーを実装し、アプリケーションの開始時に設定するため、たとえば、彼はリクエストを受け取りTaskControllerます。
  6. 残りは簡単です。Ninjectこのタイプのコンストラクターを検索し、パラメーターを挿入し、コントローラーインスタンスを返します。
于 2011-02-19T05:40:04.040 に答える
4

MVC3は、DIを処理するときにIDependencyResolver、古き良きものではなく、インターフェイスの使用を推奨するようになりました。IControllerFactoryこのインターフェースの詳細については、こちらをご覧ください

これは、依存関係の注入を担当する新しいNinjectクラスです。

于 2011-02-16T16:18:57.537 に答える
0

コントローラは具象型であるため、Ninjectは自己バインドを行います。以下はからの抜粋ですninject.complex.com

自己バインドできるのは具体的なタイプのみであることに注意してください。抽象型とインターフェースは機能しません。また、自己バインド可能なタイプのインスタンスをリクエストし、そのタイプにバインドが定義されていない場合、Ninjectは暗黙的な自己バインドを自動的に作成します。バインディングを明示的に定義するか、Ninjectに理解させるかはあなた次第です。

コンストラクターにパラメーターを挿入する必要がある場合。継承元のクラスを作成し、INinjectModuleそこでバインディングを実行できます。

于 2011-10-19T19:26:27.920 に答える