/// <summary> /// 查询执行元素 /// </summary> /// <typeparam name="TMessage"></typeparam> /// <param name="message"></param> /// <param name="messageContext"></param> /// <returns></returns> private MessageExcutingElement[] FindMessageExcutingElement <TMessage>(IMessageContext messageContext, TMessage message) where TMessage : IMessage { try { var provider = new MessageSubscriberProvider(this.serviceLocator.BeginLifetimeScope()); var elements = MessageExcutingHelper.FindMessageExcutingElement(provider, message); messageContext.Items["BeginLifetimeScope"] = provider.Scope; return(elements); } catch { throw; } }
internal static MessageExcutingElement[] FindMessageExcutingElement <TMessage>(MessageSubscriberProvider provider, TMessage e) where TMessage : IMessage { var messageHandlers = provider.FindSubscriber <TMessage>(); if (messageHandlers == null || messageHandlers.Length == 0) { return new MessageExcutingElement[] { } } ; /*先获取到每个MessageHandler的所有属性*/ var elements = new List <MessageExcutingElement>(messageHandlers.Length); for (var i = 0; i < messageHandlers.Length; i++) { var item = messageHandlers[i]; var handlerType = item.GetType(); var attributes = HandlerBehaviorStorager.Default.GetAttributes(handlerType); var loggerAttribute = ObjectExtension.GetAttribute <LoggerAttribute>(attributes); ILoggerBuilder loggerBuilder = null; if (loggerAttribute != null) { try { loggerBuilder = provider.Scope.Resolve <ILoggerBuilder>(loggerAttribute.RegisterKey); } catch { } } elements.Add(new MessageExcutingElement() { MessageContext = provider.FindMessageContext(), MessageHandler = item, MessageHandlerType = handlerType, LoggerBuilder = loggerBuilder, }); } return(elements.ToArray()); } #endregion }