Exemple #1
0
        /// <summary>
        /// 初始化上下文
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        protected virtual ICommandContext GetCommandContext(RecoveryEventModel model)
        {
            var context = new DefaultCommandContext()
            {
                Worker = new RecoveryWorker()
            };

            return(context);
        }
Exemple #2
0
        public void Publish <TEvent>(ICommandContext commandContext, TEvent e)
            where TEvent : IEvent
        {
            if (commandContext == null)
            {
                commandContext = new DefaultCommandContext();
            }

            var elements = this.FindEventExcutingElement(commandContext, e).FindAll(t => this.ExcutingElementFilter(t));

            if (elements == null || elements.Count == 0)
            {
                return;
            }

            foreach (var element in elements)
            {
                /*默认的事件上下文*/
                var defaultEventContext = element.EventContext as IStartupEventContext;
                /*初始化事件上下文*/
                if (defaultEventContext != null)
                {
                    defaultEventContext.OnInit(commandContext);
                }
                if (element.LoggerBuilder != null)
                {
                    element.EventContext.Items["LoggerBuilder"] = element.LoggerBuilder;
                }
            }

            foreach (var element in elements)
            {
                try
                {
                    this.MakeEventHandlerInvoke(e, element);
                    this.HandlerCommandToPublish(element.EventContext);
                }
                catch (Exception ex)
                {
                    this.OnEventHandlerError(element, e, ex);
                }
                finally
                {
                    this.OnReturningWhenHandlerExecuted(element.EventContext);
                }
            }

            this.Release(commandContext);
        }