クラスを結合せずに、クラス 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);
}