2011-10-28 6 views
2

私はMVC NinjectHttpApplicationを使用しています。私は基本クラス(ControllerBase)から継承するいくつかのコントローラを持っています。基本クラスはイベントを公開します。 Ninjectがコントローラーを初期化するときに、各具体的なコントローラーインスタンスに共通のイベントハンドラーを登録する必要があります。ような何か:NinjectHttpApplicationコントローライベント登録

var eventHandler = new EventHandlingObject(); 

foreach (var controller in kernel.GetAll<ControllerBase>()) 
{ 
    controller.SomeEvent += eventHandler.HandlingMethod; 
} 

は私がイベントまで、コントローラのインスタンス化とワイヤーを傍受することができますStandardKernelに任意のフックがありますか?ノーならば、私はそれらを反復処理し、それぞれのイベントを登録することができるように

kernel.Load(Assembly.GetExecutingAssembly()); 

への呼び出しに登録されたコントローラのすべてを取得する方法はありますか?

答えて

1

あなたはコントローラーの仕組みを誤解していると思います。すべてのコントローラを取得し、それらにイベントを登録することは全く意味がありません。なぜなら、各インスタンスに対して新しいインスタンスが作成されるからです。

アクティブ化アクション(OnActivation(....))を追加することができます。しかし、おそらくもっと簡単なのは、コントロールを反転させて、イベントからイベントを処理するオブジェクトをコントローラに注入し、イベントハンドリングメソッドを呼び出すことです。

+0

誤解部分では対処できません。私の元の実装では、基本コントローラだけが使用していた多くの依存関係が注入されており、継承するコントローラには同じコンストラクタを実装する必要があります。私はそれを集約コンストラクタかプロパティー注入のどちらかを使って別のものにします。 –