/// <summary> /// 初始化上下文 /// </summary> /// <param name="model"></param> /// <returns></returns> protected virtual ICommandContext GetCommandContext(RecoveryEventModel model) { var context = new DefaultCommandContext() { Worker = new RecoveryWorker() }; return(context); }
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); }