public virtual async Task <TAggregate> LoadAggregateAsync <TAggregate, TIdentity>( TIdentity id, CancellationToken cancellationToken) where TAggregate : IAggregateRoot <TIdentity> where TIdentity : IIdentity { var aggregateType = typeof(TAggregate); _log.Verbose( "Loading aggregate '{0}' with ID '{1}'", aggregateType.Name, id); var domainEvents = await LoadEventsAsync <TAggregate, TIdentity>(id, cancellationToken).ConfigureAwait(false); var aggregate = await _aggregateFactory.CreateNewAggregateAsync <TAggregate, TIdentity>(id).ConfigureAwait(false); aggregate.ApplyEvents(domainEvents); _log.Verbose( "Done loading aggregate '{0}' with ID '{1}' after applying {2} events", aggregateType.Name, id, domainEvents.Count); return(aggregate); }
public async Task <TAggregate> LoadAsync <TAggregate, TIdentity>(TIdentity id, CancellationToken cancellationToken) where TAggregate : class, IAggregateRoot <TIdentity> where TIdentity : IIdentity { TAggregate aggregate = default; var criteria = new DomainCriteria(); criteria.SafeAnd(new EqualityFilter("Id", id)); IPersistence aggregatePersistence = _persistenceFactory.GetPersistence <TAggregate>(); aggregate = await aggregatePersistence.Get <TAggregate, DomainCriteria>(criteria, CancellationToken.None); if (aggregate.IsNull()) { aggregate = await _aggregateFactory.CreateNewAggregateAsync <TAggregate, TIdentity>(id).ConfigureAwait(false); aggregate.Persistence = aggregatePersistence; return(aggregate); } else { aggregate.Persistence = aggregatePersistence; return(aggregate.AsExisting() as TAggregate); } }
public virtual async Task <TAggregate> LoadAggregateAsync <TAggregate, TIdentity>( TIdentity id, CancellationToken cancellationToken) where TAggregate : IAggregateRoot <TIdentity> where TIdentity : IIdentity { var aggregate = await _aggregateFactory.CreateNewAggregateAsync <TAggregate, TIdentity>(id).ConfigureAwait(false); await aggregate.LoadAsync(this, _snapshotStore, cancellationToken).ConfigureAwait(false); return(aggregate); }