/// <summary> /// Processes the specified command in a unit of work. /// </summary> public CommandProcessingResultWithEvents ProcessCommand(Command command) { using (var unitOfWork = BeginUnitOfWork()) { var handler = _testCommandMapper.GetCommandAction(command); handler(new DefaultCommandContext(unitOfWork.RealUnitOfWork, command.Meta), command); var eventsToReturn = unitOfWork.EmittedEvents.ToList(); foreach (var e in eventsToReturn) { e.Meta.Merge(command.Meta); } unitOfWork.Commit(); var result = new CommandProcessingResultWithEvents(eventsToReturn); if (!Asynchronous) { WaitForViewsToCatchUp(); } return(result); } }
/// <summary> /// Saves the given domain events to the history as if they were emitted by the specified aggregate root, immediately dispatching the events to the event dispatcher /// </summary> public CommandProcessingResultWithEvents Save <TAggregateRoot>(string aggregateRootId, params DomainEvent <TAggregateRoot>[] domainEvents) where TAggregateRoot : AggregateRoot { foreach (var domainEvent in domainEvents) { SetMetadata(aggregateRootId, domainEvent); } var eventData = domainEvents.Select(e => _domainEventSerializer.Serialize(e)).ToList(); _eventStore.Save(Guid.NewGuid(), eventData); _eventDispatcher.Dispatch(_eventStore, domainEvents); var result = new CommandProcessingResultWithEvents(domainEvents); if (!Asynchronous) { WaitForViewsToCatchUp(); } return(result); }