private void SourceAggregatesFromInitialEvents() { InitialEvents.GroupBy(e => e.AggregateType(), e => e) .ForEach(es => { // populate the event stream var aggregateType = es.Key; var repositoryType = typeof(IEventSourcedRepository <>).MakeGenericType(aggregateType); if (!configuration.IsUsingSqlEventStore()) { var streamName = AggregateType.EventStreamName(aggregateType); var eventStream = Configuration.Container .Resolve <ConcurrentDictionary <string, IEventStream> >() .GetOrAdd(streamName, s => new InMemoryEventStream(s)); var storableEvents = events.AssignSequenceNumbers() .Select(e => e.ToStoredEvent()); eventStream.Append(storableEvents.ToArray()) .Wait(); } else { PersistEventsToSql(es); } dynamic repository = Configuration.Container .Resolve(repositoryType); es.Select(e => e.AggregateId).Distinct().ForEach(id => { var aggregate = repository.GetLatest(id).Result; scenario.aggregates.Add(aggregate); }); }); }