1

クラスを結合せずに、クラス B でクラス A によって発生したイベントを処理する方法を探しています。

状況は、クラス A がステート マシンであるということです。クラス A の状態がアクティブになったときにメールを送信する必要があります。そのイベントをリッスンして処理するクラスを作成したいと思います。

状態ロジックをクラス A にカプセル化し、Web ページ (asp.net Web フォーム) からインスタンス化します。

Web フォーム内で電子メール クラスをインスタンス化することもできますが、そうしたくはありません。その場合、Web フォームをコーディングする開発者は、ロジックとイベントを接続する必要があります。そのすべてのロジックをビジネス層にプッシュしたいと思います。しかし、私はそれを行う方法がないようです。

BLLで

class StateHandler()
{
    public event EventHandler StateChanged;

    SetState(int newState)
    {
        // to keep things simple for sample let's assume 2 states
        if (newState ==1 ) this.State = "Active";
        else this.State = "Inactive";

        if (this.StateChanged != null)
        this.StateChanged(this, new EventArgs());

    }
}

class EmailProvider()
{
    SendEmail()
    {
        // logic to send email
    }
}

Asp.net ページ

....
void OnSubmit_click()
{
    StateHandler sh = new StateHandler();

    //adds an event handler to the StateChanged event
    sh.StateChanged += new EventHandler(sh_StateChanged);

    //setting this will fire the StateChanged event
    sh.SetState(1);

}
4

1 に答える 1

0

EventBus は、あなたの場合に役立つパターンかもしれません。これは、登録済みのサブスクライバーにイベントを渡す単純なメッセージ ブローカーです。そのためのC#ライブラリがあるかどうかはわかりません。しかし、それは簡単に実装できるはずです。グアバのEventBusを見てください。それはJavaですが、アイデアを得る必要があります。

EJB のようなコンテナー管理の状況では、コンテナーが非同期メッセージのディスパッチを処理します。Java/Java EE では、Message Driven Beansがあります。

于 2013-03-24T10:13:41.207 に答える