示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
        }