c# eventbus 封装
时间: 2023-07-25 21:20:07 浏览: 48
C#中的EventBus可以用于在不同的组件之间进行通信,尤其是在大型项目中。封装EventBus可以让使用者更方便地注册、注销和发布事件。
以下是一个简单的EventBus封装示例:
```csharp
using System;
using System.Collections.Generic;
public class EventBus
{
private Dictionary<Type, List<Delegate>> eventHandlers = new Dictionary<Type, List<Delegate>>();
public void Register<T>(Action<T> handler)
{
if (!eventHandlers.ContainsKey(typeof(T)))
{
eventHandlers.Add(typeof(T), new List<Delegate>());
}
eventHandlers[typeof(T)].Add(handler);
}
public void Unregister<T>(Action<T> handler)
{
if (eventHandlers.ContainsKey(typeof(T)))
{
eventHandlers[typeof(T)].Remove(handler);
}
}
public void Publish<T>(T e)
{
if (eventHandlers.ContainsKey(typeof(T)))
{
foreach (Action<T> handler in eventHandlers[typeof(T)])
{
handler(e);
}
}
}
}
```
使用时,可以先实例化一个EventBus对象,然后通过Register方法注册事件处理程序,使用Unregister方法注销事件处理程序,最后使用Publish方法发布事件。
例如:
```csharp
public class MyEvent
{
public string Message { get; set; }
}
public class MyComponent
{
private EventBus eventBus;
public MyComponent(EventBus eventBus)
{
this.eventBus = eventBus;
eventBus.Register<MyEvent>(HandleMyEvent);
}
private void HandleMyEvent(MyEvent e)
{
Console.WriteLine(e.Message);
}
}
class Program
{
static void Main(string[] args)
{
EventBus eventBus = new EventBus();
MyComponent component = new MyComponent(eventBus);
eventBus.Publish(new MyEvent { Message = "Hello world!" });
Console.ReadLine();
}
}
```
在上面的示例中,当MyEvent事件发布时,MyComponent的HandleMyEvent方法将被调用,并输出事件消息。