public override void Test() { var chinaSayHelloHandler = new ChinaSayHelloHandler(); var englishSayHelloHandler = new EnglishSayHelloHandler(); { DomainEventPublisherService domainEventPublisher = DomainEventPublisherService.Initialization(new DomainEventHandlerStore()); domainEventPublisher.Start(5); } { var domainEventPublisher = DomainEventPublisherService.Context; HelloDomainEvent += chinaSayHelloHandler.Handler; HelloDomainEvent += englishSayHelloHandler.Handler; domainEventPublisher.Publisher(HelloDomainEvent, new SayEventArgs() { Message = "在见面时打招呼" }); } WriteLine("*********睡6秒*********"); Thread.Sleep(6 * 1000); WriteLine("*********睡完了*********"); { var domainEventPublisher = DomainEventPublisherService.Context; HelloDomainEvent -= englishSayHelloHandler.Handler; domainEventPublisher.Publisher(HelloDomainEvent, new SayEventArgs() { Message = "在见面时打招呼" }); } WriteLine("*********睡6秒*********"); Thread.Sleep(6 * 1000); WriteLine("*********睡完了*********"); { var domainEventPublisher = DomainEventPublisherService.Context; BayBayDomainEvent += new ChinaSayByeByeHandler().Handler; BayBayDomainEvent += new EnglishSayHelloHandler().Handler; domainEventPublisher.Publisher(BayBayDomainEvent, new SayEventArgs() { Message = "在离开时打招呼" }); } { foreach (var item in HelloDomainEvent.GetInvocationList()) //按照调用顺序返回此多路广播委托的调用列表。 { var eventType = item.Target.GetType().AssemblyQualifiedName; //获取当前委托调用者的 System.Type 的程序集限定名,其中包括从中加载 System.Type 的程序集的名称 var eventMethodName = item.Method.Name; //获取委托表示方法的名称 var eventMethodParamaters = item.Method.GetParameters(); //获取委托表示方法的参数 String[] eventMethodParamaterTypes = new String[eventMethodParamaters.Length]; //委托表示方法的参数类型 var index = 0; foreach (var paramater in eventMethodParamaters) { eventMethodParamaterTypes[index] = paramater.ParameterType.AssemblyQualifiedName;//获取参数的System.Type 的程序集限定名,其中包括从中加载 System.Type 的程序集的名称 index++; } } } }
private List <Dictionary <String, Object> > eventStort = new List <Dictionary <string, Object> >();//事件及调用参数持久化 public override void Test() { var chinaSayHelloHandler = new ChinaSayHelloHandler(); var englishSayHelloHandler = new EnglishSayHelloHandler(); { HelloDomainEvent += chinaSayHelloHandler.Handler; HelloDomainEvent += englishSayHelloHandler.Handler; WriteLine("持久化事件中。。。"); Persistence(HelloDomainEvent, new SayEventArgs() { Message = "在见面时打招呼" }); WriteLine("持久化事件完成"); } { WriteLine("加载并执行事件中。。。"); foreach (var item in eventStort) { object objEventType = null; object objEventMethodName = null; object objEventMethodParamaterTypes = null; object objEventArgs = null; item.TryGetValue("eventType", out objEventType); item.TryGetValue("eventMethodName", out objEventMethodName); item.TryGetValue("eventMethodParamaterTypes", out objEventMethodParamaterTypes); //如为JSon格式还需反序列化成原来对象 item.TryGetValue("eventArgs", out objEventArgs); //如为JSon格式还需反序列化成原来对象 var delegator = CreateDelegator <DomainEventHandler>(objEventType.ToString(), objEventMethodName.ToString(), objEventMethodParamaterTypes as String[]); var eventType = Type.GetType(objEventType.ToString()); //获得委托调用者类型 var target = eventType.Assembly.CreateInstance(eventType.FullName); //实例化委托调用者 delegator(eventType, objEventArgs as BaseDomainEventArgs); } WriteLine("加载并执行事件完成"); } }