public async Task SaveAsync(TAggregate aggregate)
        {
            try
            {
                IESAggregateRoot <TAggregateId> aggregatePersistence = (IESAggregateRoot <TAggregateId>)aggregate;
                foreach (var @event in aggregatePersistence.GetUncommittedEvents())
                {
                    await AppendEventAsAsync(@event);

                    await eventPublisher.publishEvent(@event.GetType().Name, @event.aggregateId.ToString(), GetEventAsMap(@event));
                }
                aggregatePersistence.ClearUncommittedEvents();
            }
            catch (System.Exception)
            {
                throw;
            }
        }
        public async Task <TAggregate> GetByIdAsync(string id)
        {
            try
            {
                await Task.Delay(1);

                var aggregate = CreateEmptyAggregate();
                IESAggregateRoot <TAggregateId> aggregatePersistence = (IESAggregateRoot <TAggregateId>)aggregate;

                foreach (var @event in InMemoryWritePersistance <TAggregateId> .domainEvents.Where(x => x.aggregateId.ToString() == id).ToList())
                {
                    aggregatePersistence.ApplyEvent(@event, @event.aggregateVersion);
                }
                return(aggregate);
            }
            catch (Exception)
            {
                throw;
            }
        }