/// <summary> /// subscribe domain event in global area /// </summary> /// <typeparam name="Event"></typeparam> /// <param name="eventHandleOperationAsync">event handle operation</param> /// <param name="executeTime">execute time</param> public void Subscribe <Event>(Func <Event, Task <DomainEventExecuteResult> > eventHandleOperationAsync, EventExecuteTime executeTime = EventExecuteTime.Immediately) where Event : class, IDomainEvent { IDomainEventHandler domainEventHandler = null; switch (executeTime) { case EventExecuteTime.Immediately: domainEventHandler = new DefaultImmediatelyDomainEventHandler <Event>() { ExecuteEventOperation = eventHandleOperationAsync }; break; case EventExecuteTime.WorkCompleted: domainEventHandler = new DefaultWorkCompletedDomainEventHandler <Event>() { ExecuteEventOperation = eventHandleOperationAsync }; break; } Subscribe <Event>(domainEventHandler); }
/// <summary> /// subscribe domain event in global area /// </summary> /// <typeparam name="Event">event</typeparam> /// <param name="eventHandleOperation">event handle operation</param> /// <param name="executeTime">execute time</param> public void Subscribe <Event>(Func <Event, DomainEventExecuteResult> eventHandleOperation, EventExecuteTime executeTime = EventExecuteTime.Immediately) where Event : class, IDomainEvent { if (eventHandleOperation == null) { return; } Func <Event, Task <DomainEventExecuteResult> > asyncOperation = x => Task.FromResult(eventHandleOperation(x)); Subscribe(asyncOperation, executeTime); }