摘要
C# 事件总线是一种在软件架构中常见的设计模式,用于解耦事件的发布和订阅。它允许多个组件或对象之间通过订阅和发布事件来进行通信,而无需直接相互引用。事件总线可以用于在应用程序中传递消息、通知和数据,从而实现松耦合和灵活性。
正文
EventBus是一种事件总线框架,它维护一个事件字典,其中包含发布者和订阅者的信息。当事件发生时,发布者将事件实例传递到事件总线中,并等待订阅者的处理。订阅者从事件总线中获取事件实例,并执行事件处理程序。事件实例负责维护事件状态,并在事件处理程序执行完毕后,将事件状态保存在字典中以便以后使用。通过使用EventBus,发布者和订阅者可以通过一种简单的方式进行事件通信。
事件参数类
Bash
// 事件参数类
public class MessageEventArgs: EventArgs
{
public string Message { get; }
public MessageEventArgs(string message)
{
Message = message;
}
}
自定义事件总线类
Bash
// 自定义事件总线类
public class EventBus
{
//定义事件
public event EventHandler<MessageEventArgs> MessageReceived;
public void Publish(string message)
{
OnMessageReceived(new MessageEventArgs(message));
}
protected virtual void OnMessageReceived(MessageEventArgs e)
{
MessageReceived?.Invoke(this, e);
}
}
订阅者类
// 订阅者类
public class Subscriber
{
private Action<string> callback;
public Subscriber(Action<string> callback) {
this.callback=callback;
}
public void HandleMessage(object sender, MessageEventArgs e)
{
callback(e.Message);
}
}
界面调用
public partial class Form1 : Form
{
EventBus eventBus = new EventBus();
Subscriber subscriber;
public Form1()
{
InitializeComponent();
subscriber = new Subscriber((x) =>
{
MessageBox.Show(x);
});
// 订阅事件
eventBus.MessageReceived += subscriber.HandleMessage;
}
private void btnPublish_Click(object sender, EventArgs e)
{
// 发布事件
eventBus.Publish("Hello, EventBus!");
}
}