private static void _ExecuteAllDomainEventHandlers(DelayedDomainEventHandlingItems delayedDomainEventHandlingItems) { try { while (delayedDomainEventHandlingItems.Any()) { _executeOneHandler(); } } finally { delayedDomainEventHandlingItems.Each(x => _domainEventHandlerFactory.Release(x.DomainEventHandler)); } void _executeOneHandler() { var delayedDomainEventHandlingItem = delayedDomainEventHandlingItems.Dequeue(); try { delayedDomainEventHandlingItem.DomainEventHandlingAction(); } finally { _domainEventHandlerFactory.Release(delayedDomainEventHandlingItem.DomainEventHandler); } } }
public void Raise <TEvent>(TEvent e) where TEvent : IDomainEvent { foreach (var handler in _handlerFactory.Get <TEvent>()) { handler.Handle(e); _handlerFactory.Release(handler); } }