public EventSourcedAggregateFactoryTests()
        {
            eventStreamUpgrader = Substitute.For <IEventStreamUpgrader>();
            eventStreamUpgrader.UpgradeStream(null, null).ReturnsForAnyArgs(ci =>
            {
                var stream            = ci.Arg <IEnumerable <IEventMessage <DomainAggregateEvent> > >();
                var aggregateMetadata = ci.Arg <IReadOnlyDictionary <string, string> >();
                return(eventStreamUpgradeFunc(stream, aggregateMetadata));
            });

            DomainClassInfo[] domainClasses = new[]
            {
                new DomainClassInfo(entity1ClassId, null, typeof(MyEntity)),
                new DomainClassInfo(entity2ClassId, null, typeof(MyEntity2))
            };

            entityTypeManager = Substitute.For <IEntityTypeManager>();
            entityTypeManager.GetClassInfoByClassId(Guid.Empty)
            .ReturnsForAnyArgs(ci => domainClasses.Single(x => x.Id == ci.Arg <Guid>()));
            entityTypeManager.TryGetClassInfoByClrType(null)
            .ReturnsForAnyArgs(ci => domainClasses.SingleOrDefault(x => x.ClrType == ci.Arg <Type>()));
            entityTypeManager.GetClassInfoByClrType(null)
            .ReturnsForAnyArgs(ci => domainClasses.Single(x => x.ClrType == ci.Arg <Type>()));

            sut = new EventSourcedAggregateFactory(eventStreamUpgrader, new EntityFactory(), entityTypeManager);
        }
 public EventSourcedAggregateFactory(IEventStreamUpgrader eventStreamUpgrader, IEntityFactory entityFactory, IEntityTypeManager entityTypeManager)
 {
     this.eventStreamUpgrader = eventStreamUpgrader;
     this.entityFactory       = entityFactory;
     this.entityTypeManager   = entityTypeManager;
 }