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 void Persistence(DomainEventHandler DomainEvent, BaseDomainEventArgs eventArgs) { foreach (var item in HelloDomainEvent.GetInvocationList())//按照调用顺序返回此多路广播委托的调用列表。 { var dic = new Dictionary <String, Object>(); 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++; } dic.Add("eventType", eventType); dic.Add("eventMethodName", eventMethodName); dic.Add("eventMethodParamaterTypes", eventMethodParamaterTypes); //可转为JSon格式保存 dic.Add("eventArgs", eventArgs); //可转为JSon格式保存 eventStort.Add(dic); } }