private void Then() { if (_eventStack == null) { IAggregateLoader loader = GetOrder(); var uncommitedEvents = loader.GetUncommittedChanges(); _eventStack = new Stack <LoadedEvent>(uncommitedEvents.Reverse()); } }
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(); } }
/// <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(); }
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); }
/// <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); }