Exemplo n.º 1
0
 private void Then()
 {
     if (_eventStack == null)
     {
         IAggregateLoader loader = GetOrder();
         var uncommitedEvents    = loader.GetUncommittedChanges();
         _eventStack = new Stack <LoadedEvent>(uncommitedEvents.Reverse());
     }
 }
Exemplo n.º 2
0
        public async Task SaveAsync(TAggregateRoot aggregate)
        {
            IAggregateLoader loader = aggregate;
            var changes             = loader.GetUncommittedChanges();

            if (changes.Any())
            {
                var streamName = GetStreamName(aggregate.GetIdentifier());
                await _eventStore.SaveEventsAsync(streamName, aggregate.Version, changes);

                loader.MarkChangesAsCommitted();
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UnitOfWork" /> class.
 /// </summary>
 /// <param name="provider">The provider.</param>
 /// <param name="loader">The loader.</param>
 /// <param name="aggregateEventContext">The aggregate event context.</param>
 /// <param name="workContext">The context.</param>
 /// <param name="queueSender">The queue sender.</param>
 public UnitOfWork(
     IPersistenceProvider provider,
     IAggregateLoader loader,
     IAggregateEventContext aggregateEventContext,
     IUnitOfWorkContext workContext,
     IUnitOfWorkQueueSender queueSender)
 {
     this.provider = Check.NotNull(() => provider);
     this.loader   = Check.NotNull(() => loader);
     this.aggregateEventContext = Check.NotNull(() => aggregateEventContext);
     this.workContext           = Check.NotNull(() => workContext);
     this.queueSender           = Check.NotNull(() => queueSender);
     this.Clean();
 }
Exemplo n.º 4
0
        public async Task <TAggregateRoot?> FindAsync(IIdentifier identifier)
        {
            var streamName   = GetStreamName(identifier);
            var eventsResult = await _eventStore.GetStreamEventsAsync(streamName);

            var firstLoadedEvent = eventsResult.Events.FirstOrDefault();

            if (firstLoadedEvent != null)
            {
                TAggregateRoot   aggregate = CreateInternal(firstLoadedEvent);
                IAggregateLoader loader    = aggregate;
                loader.SetAggregateContext(AggregateContext);
                loader.LoadFromHistory(eventsResult.Version, eventsResult.Events.Skip(1));
                return(aggregate);
            }

            return(null);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AggregateSnapShoter" /> class.
 /// </summary>
 /// <param name="provider">The provider.</param>
 /// <param name="loader">The loader.</param>
 /// <param name="serializer">The serializer.</param>
 public AggregateSnapShoter(IPersistenceProvider provider, IAggregateLoader loader, ITextSerializer serializer)
 {
     this.provider   = Check.NotNull(() => provider);
     this.serializer = Check.NotNull(() => serializer);
     this.loader     = Check.NotNull(() => loader);
 }