/// <summary> 执行事务 </summary> /// <param name="manager"></param> /// <param name="eventName"></param> /// <param name="data"></param> /// <returns></returns> public static async Task ProcessEvent(this ISubscribeManager manager, string eventName, byte[] data) { var codec = CurrentIocManager.Resolve <IMessageCodec>(); if (manager.HasSubscriptionsForEvent(eventName)) { var eventType = manager.GetEventTypeByName(eventName); var @event = codec.Decode(data, eventType); var handlers = manager.GetHandlersForEvent(eventName); foreach (var handlerfactory in handlers) { var handler = handlerfactory.DynamicInvoke(); var concreteType = typeof(IEventHandler <>).MakeGenericType(eventType); var method = concreteType.GetMethod("Handle"); if (method == null) { continue; } await(Task) method.Invoke(handler, new[] { @event }); } } }