1

我正在寻找一种方法来处理 B 类中 A 类引发的事件而不耦合类。

情况是 A 类是一个状态机。当 A 类的状态变为活动时,我需要发送电子邮件。我想创建一个类来监听该事件并处理它。

我将状态逻辑封装在 A 类中,并从网页(asp.net webform)中对其进行实例化。

我也可以在 webform 中实例化 email 类,但我不希望这样做,在这种情况下,编写 webform 的开发人员将不得不连接逻辑和事件。我想将所有这些逻辑推回到业务层。但我似乎没有办法做到这一点。

在 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 回答