public async Task <T> Load <T>(NonEmptyGuid id, CancellationToken cancellationToken = default) where T : IAggregate, new() { var aggregate = new T(); if (aggregate is Aggregate eventSourced) { eventSourced.Id = id; var filter = EventFilter.ForAggregate(id); await foreach (var(item, _) in _readRepository.Get(filter, cancellationToken)) { eventSourced.LoadFromHistory(item); } } else { throw new NotImplementedException(); } return(aggregate); }