public async Task RaiseAsync(IPresentationEvent domainEvent) { var eventType = domainEvent.GetType(); var eventHandlerType = typeof(IHandlePresentationEventAsync<>).MakeGenericType(eventType); var eventHandlerListType = typeof(IEnumerable<>).MakeGenericType(eventHandlerType); var eventHandlers = (IEnumerable)_context.Resolve(eventHandlerListType); foreach (var handler in eventHandlers) { var handleMethod = GetHandleMethod(eventType, eventHandlerType); var result = handleMethod.Invoke(handler, new object[] { domainEvent }); if (result is Task) { await ((Task)result); } } }
public async void Raise(IPresentationEvent domainEvent) { await RaiseAsync(domainEvent); }