public async Task SaveSnapshotAsync <T>(IAggregateWithSnapshot <T> aggregate, Guid snapshotId)
            where T : class
        {
            if (aggregate == null)
            {
                throw new ArgumentNullException(nameof(aggregate));
            }

            T snapshot = aggregate.TakeSnapshot();
            EventStoreSnapshot eventStoreSnapshot = new EventStoreSnapshot(snapshotId, aggregate.EventStreamRevision, snapshot);

            await this.eventStoreProvider.AddSnapshotAsync(aggregate.EventStreamId, aggregate.SnapshotStreamId, eventStoreSnapshot).ConfigureAwait(false);

            aggregate.NumberOfEventsSinceLastSnapshot = 0;
        }