これはばかげた質問かもしれませんが、私はNinjectソースを調べていますが、NInjectが独自のコントローラーファクトリを登録しているのを見ていません。また、アセンブリIControllerFactory
にクラスが表示されません。Ninject.Web.Mvc
私は何かが足りないのですか?Ninjectはどのようにしてコントローラーを作成し、パラメーターをコンストラクターに挿入しますか?
2057 次
3 に答える
13
- 「/Task/Index」を探しているとしましょう。
- Ninject MVCアプリケーションは
DefaultControllerFactory
、非Ninjectアプリケーションと同じように使用するようになりました。 DefaultControllerFactory
コントローラのタイプを検索します(TaskController
)。DefaultControllerFactory
と呼ばれる内部クラスがありDefaultControllerActivator
ます。コントローラインスタンスを返す、DefaultControllerActivator
というメソッドがあります。タイプインスタンスを要求します。Create
DefaultControllerFactory
DefaultControllerActivator
TaskController
DefaultControllerActivator.Create
を使用しIDependencyResolver
ます。これがNinject
出番です。Ninject
独自のリゾルバーを実装し、アプリケーションの開始時に設定するため、たとえば、彼はリクエストを受け取りTaskController
ます。- 残りは簡単です。
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 に答える