EventBus实现、发布订阅及XML加载2014-06-19 cnblogs Aaron受到CQRS的影响,写了个EventBus,能实现发布订阅模式执行event,在DDD模 型中,可以使用如下代码触发事件:EventBus bus = EventBus.Instance();
bus.Publish(new OrderAddedEvent());解决方案结构图如下,很简单易懂:

xml事件配置代码sample如下(1个event可以定义多个订阅者,如下):
<?xml version="1.0" encoding="utf-8" ?><Events><Event><PublishEvent>ConsoleApplication2.code.Events.OrderAddedEvent</PublishEvent><SubscribedEvents><SubscribedEvent>ConsoleApplication2.code.EventHandlers.OrderAddedEventHandler_CachePrepare</SubscribedEvent><SubscribedEvent>ConsoleApplication2.code.EventHandlers.OrderAddedEventHandler_PDFGenerate</SubscribedEvent></SubscribedEvents></Event><Event><PublishEvent>ConsoleApplication2.code.Events.OrderDeletedEvent</PublishEvent><SubscribedEvents><SubscribedEvent>ConsoleApplication2.code.EventHandlers.OrderDeletedEventHandler_NotifyClient</SubscribedEvent><SubscribedEvent>ConsoleApplication2.code.EventHandlers.OrderDeletedEventHandler_RemovCache</SubscribedEvent></SubscribedEvents></Event></Events>
我们先来定义Event:
public class BaseEvent //空的,不需要实现其他方法{}public class OrderAddedEvent : BaseEvent//订单已经加入,触发的event{}public class OrderDeletedEvent : BaseEvent //订单已经删除,触发的event{public Guid OrderId { get; set; }public OrderDeletedEvent(Guid orderId){this.OrderId = orderId;}}
定义事件的处理程序:
public interface IEventHandler<T>where T : BaseEvent{void Handle(T evt);}public class OrderDeletedEventHandler_NotifyClient : IEventHandler<OrderDeletedEvent>{public void Handle(OrderDeletedEvent evt){Console.WriteLine("[Order deleted] Notified.");}}