/// <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); } }
/// <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; }
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); } }
public abstract void Handler(object sender, BaseDomainEventArgs eventArgs);
public override void Handler(object sender, BaseDomainEventArgs eventArgs) { SayEventArgs sayEventArgs = (SayEventArgs)eventArgs; Console.WriteLine("{0}:English Say Bye Bye", sayEventArgs.Message); }
/// <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)); }