Example #1
0
        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);
        }
Example #2
0
        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);
        }