/// <summary> /// 自动订阅所有事件数据及其处理类型 /// </summary> /// <param name="eventHandlerTypes">事件处理器类型集合</param> public virtual void SubscribeAll(Type[] eventHandlerTypes) { Check.NotNull(eventHandlerTypes, nameof(eventHandlerTypes)); foreach (Type eventHandlerType in eventHandlerTypes) { Type handlerInterface = eventHandlerType.GetInterface("IEventHandler`1"); //获取该类实现的泛型接口 if (handlerInterface == null) { continue; } Type eventDataType = handlerInterface.GetGenericArguments()[0]; //泛型的EventData类型 IEventHandlerFactory factory = new IocEventHandlerFactory(ServiceScopeFactory, eventHandlerType); EventStore.Add(eventDataType, factory); Logger.LogDebug($"创建事件“{eventDataType}”到处理器“{eventHandlerType}”的订阅配对"); } Logger.LogInformation($"共从程序集创建了{eventHandlerTypes.Length}个事件处理器的事件订阅"); }
/// <summary> /// 遍历程序集类型,自动订阅所有事件数据及其处理类型 /// </summary> /// <param name="assembly">程序集</param> public virtual void SubscribeAll(Assembly assembly) { assembly.CheckNotNull("assembly"); Type[] handlerTypes = assembly.GetTypes().Where(type => type.IsDeriveClassFrom(typeof(IEventHandler <>))).ToArray(); if (handlerTypes.Length == 0) { return; } foreach (Type handlerType in handlerTypes) { Type handlerInterface = handlerType.GetInterface("IEventHandler`1"); //获取该类实现的泛型接口 if (handlerInterface == null) { continue; } Type eventType = handlerInterface.GetGenericArguments()[0]; //泛型的EventData类型 IEventHandlerFactory factory = new IocEventHandlerFactory(handlerType); _EventStore.Add(eventType, factory); } }
/// <summary> /// 遍历程序集类型,自动订阅所有事件数据及其处理类型 /// </summary> /// <param name="assembly">程序集</param> public virtual void SubscribeAll(Assembly assembly) { assembly.CheckNotNull("assembly"); Type[] handlerTypes = assembly.GetTypes().Where(type => type.IsDeriveClassFrom(typeof(IEventHandler <>))).ToArray(); if (handlerTypes.Length == 0) { return; } foreach (Type handlerType in handlerTypes) { Type handlerInterface = handlerType.GetInterface("IEventHandler`1"); //获取该类实现的泛型接口 if (handlerInterface == null) { continue; } Type eventType = handlerInterface.GetGenericArguments()[0]; //泛型的EventData类型 IEventHandlerFactory factory = new IocEventHandlerFactory(handlerType); _EventStore.Add(eventType, factory); _Logger.LogDebug($"创建事件“{eventType}”到处理器“{handlerType}”的订阅配对"); } _Logger.LogInformation($"程序集“{assembly.GetName().Name}”创建了{handlerTypes.Length}个处理器的事件订阅"); }