Esempio n. 1
0
 /// <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;
     }
 }
Esempio n. 2
0
        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
    }