Пример #1
0
 /// <summary>
 //  发行
 /// </summary>
 /// <param name="eventArgs"></param>
 public void Publisher(DomainEventHandler DomainEvent, BaseDomainEventArgs eventArgs)
 {
     foreach (Delegate item in DomainEvent.GetInvocationList())
     {
         DomainEventHandlerEntity entity = DomainEventHandlerEntity.CreateNew(item.Target.GetType(), item.Method, eventArgs.GetType(), eventArgs);
         store.AddDomainEventHandler(entity.objectValue);
     }
 }
Пример #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="objectValue"></param>
        private DomainEventHandlerEntity(DomainEventHandlerValueObject objectValue)
        {
            eventType          = Type.GetType(objectValue.EventType);
            eventParameterType = Type.GetType(objectValue.EventParameterType);

            eventArgs = (BaseDomainEventArgs)eventParameterType.Assembly.CreateInstance(eventParameterType.FullName);
            JsonConvert.PopulateObject(objectValue.EventJsonParameter, eventArgs);

            this.objectValue = objectValue;
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
 public abstract void Handler(object sender, BaseDomainEventArgs eventArgs);
Пример #5
0
        public override void Handler(object sender, BaseDomainEventArgs eventArgs)
        {
            SayEventArgs sayEventArgs = (SayEventArgs)eventArgs;

            Console.WriteLine("{0}:English Say Bye Bye", sayEventArgs.Message);
        }
Пример #6
0
        /// <summary>
        /// 创建新的领域事件处理实体
        /// </summary>
        /// <param name="EventType">事件类型</param>
        /// <param name="EventParameterType">事件参数类型</param>
        /// <param name="eventArgs">事件参数</param>
        /// <returns></returns>
        public static DomainEventHandlerEntity CreateNew(Type EventType, MethodInfo EventMethod, Type EventParameterType, BaseDomainEventArgs eventArgs)
        {
            var parameters = EventMethod.GetParameters();

            String[] parameterTypes = new String[parameters.Length];
            int      index          = 0;

            foreach (var item in parameters)
            {
                parameterTypes[index++] = item.ParameterType.AssemblyQualifiedName;
            }
            var objectValue = CreateNewObjectValue(EventType.AssemblyQualifiedName, EventMethod.Name, parameterTypes, EventParameterType.AssemblyQualifiedName, JsonConvert.SerializeObject(eventArgs));

            return(new DomainEventHandlerEntity(objectValue));
        }