Exemple #1
0
        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);
                });
            });
        }