public async Task <T> GetByIdAsync <T>(Guid aggregateId) where T : AggregateRoot <Guid>
        {
            if (aggregateId == Guid.Empty)
            {
                throw new BadAggregateIdException(ErrorCode.BadAggregateId, nameof(aggregateId));
            }

            var aggregate = _invoker.CreateInstanceOfAggregateRoot <T>();

            if (aggregate == null)
            {
                throw new NullInstanceOfAggregateException(ErrorCode.NullInstanceOfAggregate, nameof(aggregate));
            }

            var eventStoreItems = _dbSet.AsNoTracking().Where(e => e.AggregateId == aggregateId).AsQueryable();

            if (!eventStoreItems.Any())
            {
                return(await Task.FromResult <T>(null));
            }

            var events = _eventStoreToEVent.RebuildDomainEvents(eventStoreItems);

            aggregate.LoadFromHistory(events);

            return(await Task.FromResult(aggregate));
        }