2012-03-07 12 views
0

カスタムイベントフックに登録したいMvc3プロジェクトがあります。Mvc3カスタムイベントフック

「ユーザーログオン」のようなイベントに登録することができます。他のプロジェクトにはビジネスロジックがあるので、コントローラではやりたくありません。

私のMvc3-Projectでは、ユーザーがログオンしたときに実行されるコードを持つクラスをいくつか書きたいと思います。しかし、これらのクラス(またはそれらのインスタンス)をイベントにどのように登録するのですか?特殊な基底クラスから継承したすべてのクラスを検索するリフレクションを使用することをお勧めしますか、それとももっとスマートな方法がありますか?

また、私は呼び出されたアクションを監視したくないので、ビジネスロジックがMvc3-Projectでいくつかのクラスをトリガーするようにしたいと思います。クリスは以下のコメントで指摘するように

+0

ログオンイベントをトラップするだけでいいですか、ログイン後(またはその前)にも影響を与えたいですか?また、あなたはリフレクションを介して検索する "特別な基底クラス"のどのような役割を見ていますか? –

+0

ログイン後に影響を与えたい。私のコントローラのアクションでは、ビジネスロジックのloginメソッドを呼び出します。 Buisnessロジックには、イベント "OnUserLogon"があります。私のMVCプロジェクトでは、今、そのイベントに登録したいと思っています。しかし問題は、htmlはステートレスなので、イベントに登録しなければならないすべてのクラスを見つけるためのインターフェイスまたはベースクラスを書くことを考えています。 – Chris

+0

コントロールコンテナの反転を使用していますか? – jgauffin

答えて

0

EDIT
は、MVC3は、このソリューションを使用すると、すべてのリクエストに応じてこれらのイベントのために再登録しなければならないことを意味し、ステートレスです。これは、おそらくMVCのための非常に良い解決策ではありません。


あなたはグローバルイベントサービスを検討しましたか?

ラフ例:


class Example : IEventReceiver 
{ 
    public void Init() 
    { 
     EventService.Subscribe("Logon", this); 
    } 

    private void OnEvent(string eventName) 
    { 
     // Do logon stuff here. 
    } 
} 

あなたはシングルトンまたはサービスであるかもしれないEventServiceクラスを作成する必要があります。

public interface IEventService 
{ 
    void Subscribe(string eventName, IEventReceiver receiver); 
    void Unsubscribe(string eventName, IEventReceiver receiver); 
    void DispatchEvent(string eventName); 
} 

public interface IEventReceiver 
{ 
    void OnEvent(string eventName); 
}
+0

私はあなたの解決策についてまだ考えています。主な問題は、mvc3はステートレスなので、ページが読み込まれるたびにイベントを登録する必要があることです。 – Chris

+0

それは非常に良い点です。これはおそらく良い解決策ではないでしょう。 – blachniet