Beispiel #1
0
        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("加载并执行事件完成");
            }
        }