Beispiel #1
0
 public Synchronizer(
     IReadOnlyEntityRepository <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TContext> atypeRepository,
     IReadOnlyEntityRepository <TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> btypeRepository,
     IBatchWriteOnlyEntityRepository <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TContext> atypeWriteRepository,
     IBatchWriteOnlyEntityRepository <TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> btypeWriteRepository,
     IInitialSyncStateCreationStrategy <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> initialSyncStateCreationStrategy,
     IEntityRelationDataAccess <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataAccess,
     IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataFactory,
     IInitialEntityMatcher <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> initialEntityMatcher,
     IEqualityComparer <TAtypeEntityId> atypeIdComparer, IEqualityComparer <TBtypeEntityId> btypeIdComparer,
     ITotalProgressFactory totalProgressFactory,
     IEqualityComparer <TAtypeEntityVersion> atypeVersionComparer,
     IEqualityComparer <TBtypeEntityVersion> btypeVersionComparer, IEntitySyncStateFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> syncStateFactory,
     ISynchronizationInterceptorFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> synchronizationInterceptorFactory = null)
 {
     _initialSyncStateCreationStrategy = initialSyncStateCreationStrategy;
     _totalProgressFactory             = totalProgressFactory;
     _atypeIdComparer      = atypeIdComparer;
     _btypeIdComparer      = btypeIdComparer;
     _atypeVersionComparer = atypeVersionComparer;
     _btypeVersionComparer = btypeVersionComparer;
     _syncStateFactory     = syncStateFactory;
     _synchronizationInterceptorFactory = synchronizationInterceptorFactory ?? NullSynchronizationInterceptorFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> .Instance;
     _atypeWriteRepository      = atypeWriteRepository;
     _btypeWriteRepository      = btypeWriteRepository;
     _atypeRepository           = atypeRepository;
     _btypeRepository           = btypeRepository;
     _entityRelationDataAccess  = entityRelationDataAccess;
     _entityRelationDataFactory = entityRelationDataFactory;
     _initialEntityMatcher      = initialEntityMatcher;
 }
 public Synchronizer(
     IReadOnlyEntityRepository <TAtypeEntity, TAtypeEntityId, TAtypeEntityVersion, TContext> atypeRepository,
     IReadOnlyEntityRepository <TBtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TContext> btypeRepository,
     IBatchWriteOnlyEntityRepository <TAtypeEntity, TAtypeEntityId, TAtypeEntityVersion, TContext> atypeWriteRepository,
     IBatchWriteOnlyEntityRepository <TBtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TContext> btypeWriteRepository,
     IInitialSyncStateCreationStrategy <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> initialSyncStateCreationStrategy,
     IEntityRelationDataAccess <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataAccess,
     IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataFactory,
     IInitialEntityMatcher <TAtypeEntity, TAtypeEntityId, TAtypeEntityVersion, TBtypeEntity, TBtypeEntityId, TBtypeEntityVersion> initialEntityMatcher,
     IEqualityComparer <TAtypeEntityId> atypeIdComparer, IEqualityComparer <TBtypeEntityId> btypeIdComparer,
     ITotalProgressFactory totalProgressFactory,
     IExceptionLogger exceptionLogger,
     ISynchronizationContextFactory <TContext> contextFactory,
     IEqualityComparer <TAtypeEntityVersion> atypeVersionComparer,
     IEqualityComparer <TBtypeEntityVersion> btypeVersionComparer)
 {
     _initialSyncStateCreationStrategy = initialSyncStateCreationStrategy;
     _totalProgressFactory             = totalProgressFactory;
     _atypeIdComparer           = atypeIdComparer;
     _btypeIdComparer           = btypeIdComparer;
     _exceptionLogger           = exceptionLogger;
     _contextFactory            = contextFactory;
     _atypeVersionComparer      = atypeVersionComparer;
     _btypeVersionComparer      = btypeVersionComparer;
     _atypeWriteRepository      = atypeWriteRepository;
     _btypeWriteRepository      = btypeWriteRepository;
     _atypeRepository           = atypeRepository;
     _btypeRepository           = btypeRepository;
     _entityRelationDataAccess  = entityRelationDataAccess;
     _entityRelationDataFactory = entityRelationDataFactory;
     _initialEntityMatcher      = initialEntityMatcher;
 }
Beispiel #3
0
 public EntitySyncStateEnvironment(IEntityMapper <TAtypeEntity, TBtypeEntity, TContext> mapper, IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> dataFactory, IEntitySyncStateFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> stateFactory, IExceptionLogger exceptionLogger)
 {
     ExceptionLogger = exceptionLogger;
     Mapper          = mapper;
     DataFactory     = dataFactory;
     StateFactory    = stateFactory;
 }
        public TestSynchronizerSetup()
        {
            _localRepository  = new TestRepository("l");
            _serverRepository = new TestRepository("s");

            _entityRelationDataFactory = new EntityRelationDataFactory();
        }
Beispiel #5
0
 public EntitySyncStateEnvironment(IEntityMapper <TAtypeEntity, TBtypeEntity> mapper, IWriteOnlyEntityRepository <TAtypeEntity, TAtypeEntityId, TAtypeEntityVersion> aRepository, IWriteOnlyEntityRepository <TBtypeEntity, TBtypeEntityId, TBtypeEntityVersion> bRepository, IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> dataFactory, IEntitySyncStateFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> stateFactory, IExceptionLogger exceptionLogger)
 {
     ExceptionLogger = exceptionLogger;
     Mapper          = mapper;
     ARepository     = aRepository;
     BRepository     = bRepository;
     DataFactory     = dataFactory;
     StateFactory    = stateFactory;
 }
Beispiel #6
0
 public EntitySyncStateFactory(
     IEntityMapper <TAtypeEntity, TBtypeEntity, TContext> mapper,
     IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> dataFactory,
     IExceptionLogger exceptionLogger)
 {
     _environment = new EntitySyncStateEnvironment <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> (
         mapper,
         dataFactory,
         this,
         exceptionLogger);
 }
Beispiel #7
0
        public List <IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> > FindMatchingEntities(
            IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> relationFactory,
            IReadOnlyDictionary <TAtypeEntityId, TAtypeEntity> allAtypeEntities,
            IReadOnlyDictionary <TBtypeEntityId, TBtypeEntity> allBtypeEntities,
            IReadOnlyDictionary <TAtypeEntityId, TAtypeEntityVersion> atypeEntityVersions,
            IReadOnlyDictionary <TBtypeEntityId, TBtypeEntityVersion> btypeEntityVersions
            )
        {
            var atypeEntityIdsGroupedByProperty = allAtypeEntities.GroupBy(a => GetAtypePropertyValue(a.Value)).ToDictionary(g => g.Key, g => g.Select(o => o.Key).ToList());
            var btypeEntityIdsGroupedByProperty = allBtypeEntities.GroupBy(b => GetBtypePropertyValue(b.Value)).ToDictionary(g => g.Key, g => g.ToDictionary(o => o.Key, o => true, _btypeIdEqualityComparer));

            List <IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> > foundRelations = new List <IEntityRelationData <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> >();

            foreach (var atypeEntityGroup in atypeEntityIdsGroupedByProperty)
            {
                foreach (var atypeEntityId in atypeEntityGroup.Value)
                {
                    Dictionary <TBtypeEntityId, bool> btypeEntityGroup;

                    var btypeEntityGroupKey = MapAtypePropertyValue(atypeEntityGroup.Key);
                    if (btypeEntityIdsGroupedByProperty.TryGetValue(btypeEntityGroupKey, out btypeEntityGroup))
                    {
                        foreach (var btypeEntityId in btypeEntityGroup.Keys)
                        {
                            if (AreEqual(allAtypeEntities[atypeEntityId], allBtypeEntities[btypeEntityId]))
                            {
                                s_logger.DebugFormat("Found matching entities: '{0}' == '{1}'", atypeEntityId, btypeEntityId);

                                foundRelations.Add(relationFactory.Create(atypeEntityId, atypeEntityVersions[atypeEntityId], btypeEntityId, btypeEntityVersions[btypeEntityId]));
                                // b has to be removed from the Group, because b is iterated in the inner loop an if an second match would occour this will lead to an exception
                                // not required to remove a from the group, because in the aouter loop every group is just iterated once
                                btypeEntityGroup.Remove(btypeEntityId);
                                break;
                            }
                        }

                        // throwing away the empty dictionaries is not neccessary. Just to make dubugging easier, because there is less crap the dictionary.
                        if (btypeEntityGroup.Count == 0)
                        {
                            btypeEntityIdsGroupedByProperty.Remove(btypeEntityGroupKey);
                        }
                    }
                }
            }


            return(foundRelations);
        }
Beispiel #8
0
        public void Setup()
        {
            _entityRelationData        = new List <EntityRelationData>();
            _localRepository           = new TestRepository("l");
            _serverRepository          = new TestRepository("s");
            _entityRelationDataFactory = new EntityRelationDataFactory();

            _factory = new EntitySyncStateFactory <Identifier, int, string, Identifier, int, string, int> (
                new Mapper(),
                _entityRelationDataFactory,
                MockRepository.GenerateMock <IExceptionLogger>()
                );

            _entityRelationDataAccess = MockRepository.GenerateStub <IEntityRelationDataAccess <Identifier, int, Identifier, int> >();
            _entityRelationDataAccess.Stub(d => d.LoadEntityRelationData()).WhenCalled(a => a.ReturnValue = _entityRelationData.ToArray());
            _entityRelationDataAccess
            .Stub(d => d.SaveEntityRelationData(null))
            .IgnoreArguments()
            .WhenCalled(a => { _entityRelationData = ((List <IEntityRelationData <Identifier, int, Identifier, int> >)a.Arguments[0]).Cast <EntityRelationData>().ToList(); });
        }
    public void Setup ()
    {
      _entityRelationData = new List<EntityRelationData>();
      _localRepository = new TestRepository ("l");
      _serverRepository = new TestRepository ("s");
      _entityRelationDataFactory = new EntityRelationDataFactory();

      _factory = new EntitySyncStateFactory<Identifier, int, string, Identifier, int, string> (
          new Mapper(),
          _entityRelationDataFactory,
          MockRepository.GenerateMock<IExceptionLogger>()
          );

      _entityRelationDataAccess = MockRepository.GenerateStub<IEntityRelationDataAccess<Identifier, int, Identifier, int>>();
      _entityRelationDataAccess.Stub (d => d.LoadEntityRelationData()).WhenCalled (a => a.ReturnValue = _entityRelationData.ToArray());
      _entityRelationDataAccess
          .Stub (d => d.SaveEntityRelationData (null))
          .IgnoreArguments()
          .WhenCalled (a => { _entityRelationData = ((List<IEntityRelationData<Identifier, int, Identifier, int>>) a.Arguments[0]).Cast<EntityRelationData>().ToList(); });
    }
        public EventSynchronizationContext(NameSpace outlookSession, IEntityRelationDataAccess <string, DateTime, Uri, string> storageDataAccess, Options options, string outlookEmailAddress, TimeSpan connectTimeout, TimeSpan readWriteTimeout, bool disableCertValidation, bool useSsl3, bool useTls12, IEqualityComparer <Uri> btypeIdEqualityComparer)
        {
            if (outlookSession == null)
            {
                throw new ArgumentNullException("outlookSession");
            }

            SynchronizationMode = options.SynchronizationMode;
            From = DateTime.Now.AddDays(-options.DaysToSynchronizeInThePast);
            To   = DateTime.Now.AddDays(options.DaysToSynchronizeInTheFuture);

            _entityRelationDataFactory = new OutlookEventRelationDataFactory();

            _entityMapper = new EventEntityMapper(outlookEmailAddress, new Uri("mailto:" + options.EmailAddress), outlookSession.Application.TimeZones.CurrentTimeZone.ID, outlookSession.Application.Version);

            _atypeRepository = new OutlookEventRepository(outlookSession, options.OutlookFolderEntryId, options.OutlookFolderStoreId);

            _btypeRepository = new CalDavRepository(
                new CalDavDataAccess(
                    new Uri(options.CalenderUrl),
                    new CalDavWebClient(
                        options.UserName,
                        options.Password,
                        connectTimeout,
                        readWriteTimeout,
                        disableCertValidation,
                        useSsl3,
                        useTls12)
                    ),
                new iCalendarSerializer(),
                CalDavRepository.EntityType.Event);

            if (StringComparer.InvariantCultureIgnoreCase.Compare(new Uri(options.CalenderUrl).Host, "www.google.com") == 0)
            {
                _btypeRepository = new EntityRepositoryDeleteCreateInstaedOfUpdateWrapper <IICalendar, Uri, string> (_btypeRepository);
            }

            _storageDataAccess = storageDataAccess;

            InitialEntityMatcher = new InitialEventEntityMatcher(btypeIdEqualityComparer);
        }
        public TaskSynchronizationContext(NameSpace outlookSession, IEntityRelationDataAccess <string, DateTime, Uri, string> storageDataAccess, Options options, TimeSpan connectTimeout, TimeSpan readWriteTimeout, bool disableCertValidation, bool useSsl3, bool useTls12, IEqualityComparer <Uri> btypeIdEqualityComparer)
        {
            if (outlookSession == null)
            {
                throw new ArgumentNullException("outlookSession");
            }

            SynchronizationMode = options.SynchronizationMode;
            From = DateTime.Now.AddDays(-options.DaysToSynchronizeInThePast);
            To   = DateTime.Now.AddDays(options.DaysToSynchronizeInTheFuture);

            _entityRelationDataFactory = new OutlookEventRelationDataFactory();

            _entityMapper = new TaskMapper(outlookSession.Application.TimeZones.CurrentTimeZone.ID);

            var calendarFolder = (Folder)outlookSession.GetFolderFromID(options.OutlookFolderEntryId, options.OutlookFolderStoreId);

            _atypeRepository = new OutlookTaskRepository(calendarFolder, outlookSession);

            _btypeRepository = new CalDavRepository(
                new CalDavDataAccess(
                    new Uri(options.CalenderUrl),
                    new CalDavWebClient(
                        options.UserName,
                        options.Password,
                        connectTimeout,
                        readWriteTimeout,
                        disableCertValidation,
                        useSsl3,
                        useTls12)
                    ),
                new iCalendarSerializer(),
                CalDavRepository.EntityType.Todo);

            _storageDataAccess = storageDataAccess;

            InitialEntityMatcher = new InitialTaskEntityMatcher(btypeIdEqualityComparer);
        }
        public Synchronizer(
            IReadOnlyEntityRepository <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TContext> atypeRepository,
            IReadOnlyEntityRepository <TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> btypeRepository,
            IBatchWriteOnlyEntityRepository <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TContext> atypeWriteRepository,
            IBatchWriteOnlyEntityRepository <TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> btypeWriteRepository,
            IInitialSyncStateCreationStrategy <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> initialSyncStateCreationStrategy,
            IEntityRelationDataAccess <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataAccess,
            IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> entityRelationDataFactory,
            IInitialEntityMatcher <TAtypeEntityId, TAtypeEntityVersion, TAMatchData, TBtypeEntityId, TBtypeEntityVersion, TBMatchData> initialEntityMatcher,
            IEqualityComparer <TAtypeEntityId> atypeIdComparer, IEqualityComparer <TBtypeEntityId> btypeIdComparer,
            ITotalProgressFactory totalProgressFactory,
            IEqualityComparer <TAtypeEntityVersion> atypeVersionComparer,
            IEqualityComparer <TBtypeEntityVersion> btypeVersionComparer, IEntitySyncStateFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> syncStateFactory,
            IExceptionHandlingStrategy exceptionHandlingStrategy,
            IMatchDataFactory <TAtypeEntity, TAMatchData> aMatchDataFactory,
            IMatchDataFactory <TBtypeEntity, TBMatchData> bMatchDataFactory,
            int?chunkSize,
            IChunkedExecutor chunkedExecutor,
            IFullEntitySynchronizationLoggerFactory <TAtypeEntity, TBtypeEntity> fullEntitySynchronizationLoggerFactory,
            IStateAwareEntityRepository <TAtypeEntityId, TAtypeEntityVersion, TContext, TAtypeStateToken> atypeStateAwareEntityRepository,
            IStateAwareEntityRepository <TBtypeEntityId, TBtypeEntityVersion, TContext, TBtypeStateToken> btypeStateAwareEntityRepository,
            IStateTokenDataAccess <TAtypeStateToken, TBtypeStateToken> stateTokenDataAccess,
            ISynchronizationInterceptorFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> synchronizationInterceptorFactoryOrNull = null)
        {
            if (atypeRepository == null)
            {
                throw new ArgumentNullException(nameof(atypeRepository));
            }
            if (btypeRepository == null)
            {
                throw new ArgumentNullException(nameof(btypeRepository));
            }
            if (atypeWriteRepository == null)
            {
                throw new ArgumentNullException(nameof(atypeWriteRepository));
            }
            if (btypeWriteRepository == null)
            {
                throw new ArgumentNullException(nameof(btypeWriteRepository));
            }
            if (initialSyncStateCreationStrategy == null)
            {
                throw new ArgumentNullException(nameof(initialSyncStateCreationStrategy));
            }
            if (entityRelationDataAccess == null)
            {
                throw new ArgumentNullException(nameof(entityRelationDataAccess));
            }
            if (entityRelationDataFactory == null)
            {
                throw new ArgumentNullException(nameof(entityRelationDataFactory));
            }
            if (initialEntityMatcher == null)
            {
                throw new ArgumentNullException(nameof(initialEntityMatcher));
            }
            if (atypeIdComparer == null)
            {
                throw new ArgumentNullException(nameof(atypeIdComparer));
            }
            if (btypeIdComparer == null)
            {
                throw new ArgumentNullException(nameof(btypeIdComparer));
            }
            if (totalProgressFactory == null)
            {
                throw new ArgumentNullException(nameof(totalProgressFactory));
            }
            if (atypeVersionComparer == null)
            {
                throw new ArgumentNullException(nameof(atypeVersionComparer));
            }
            if (btypeVersionComparer == null)
            {
                throw new ArgumentNullException(nameof(btypeVersionComparer));
            }
            if (syncStateFactory == null)
            {
                throw new ArgumentNullException(nameof(syncStateFactory));
            }
            if (exceptionHandlingStrategy == null)
            {
                throw new ArgumentNullException(nameof(exceptionHandlingStrategy));
            }
            if (aMatchDataFactory == null)
            {
                throw new ArgumentNullException(nameof(aMatchDataFactory));
            }
            if (bMatchDataFactory == null)
            {
                throw new ArgumentNullException(nameof(bMatchDataFactory));
            }
            if (fullEntitySynchronizationLoggerFactory == null)
            {
                throw new ArgumentNullException(nameof(fullEntitySynchronizationLoggerFactory));
            }
            if (atypeStateAwareEntityRepository == null)
            {
                throw new ArgumentNullException(nameof(atypeStateAwareEntityRepository));
            }
            if (btypeStateAwareEntityRepository == null)
            {
                throw new ArgumentNullException(nameof(btypeStateAwareEntityRepository));
            }
            if (stateTokenDataAccess == null)
            {
                throw new ArgumentNullException(nameof(stateTokenDataAccess));
            }

            _chunkSize       = chunkSize;
            _chunkedExecutor = chunkedExecutor;
            _fullEntitySynchronizationLoggerFactory = fullEntitySynchronizationLoggerFactory;
            _atypeStateAwareEntityRepository        = atypeStateAwareEntityRepository;
            _btypeStateAwareEntityRepository        = btypeStateAwareEntityRepository;
            _stateTokenDataAccess = stateTokenDataAccess;

            _initialSyncStateCreationStrategy = initialSyncStateCreationStrategy;
            _totalProgressFactory             = totalProgressFactory;
            _atypeIdComparer                   = atypeIdComparer;
            _btypeIdComparer                   = btypeIdComparer;
            _atypeVersionComparer              = atypeVersionComparer;
            _btypeVersionComparer              = btypeVersionComparer;
            _syncStateFactory                  = syncStateFactory;
            _exceptionHandlingStrategy         = exceptionHandlingStrategy;
            _aMatchDataFactory                 = aMatchDataFactory;
            _bMatchDataFactory                 = bMatchDataFactory;
            _synchronizationInterceptorFactory = synchronizationInterceptorFactoryOrNull ?? NullSynchronizationInterceptorFactory <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext> .Instance;
            _atypeWriteRepository              = atypeWriteRepository;
            _btypeWriteRepository              = btypeWriteRepository;
            _atypeRepository                   = atypeRepository;
            _btypeRepository                   = btypeRepository;
            _entityRelationDataAccess          = entityRelationDataAccess;
            _entityRelationDataFactory         = entityRelationDataFactory;
            _initialEntityMatcher              = initialEntityMatcher;
            _entitySyncStateChunkCreator       = new EntitySyncStateChunkCreator <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity, TContext>(chunkSize);
        }
 public EntitySyncStateFactory(IEntityMapper <TAtypeEntity, TBtypeEntity> mapper, IWriteOnlyEntityRepository <TAtypeEntity, TAtypeEntityId, TAtypeEntityVersion> aRepository, IWriteOnlyEntityRepository <TBtypeEntity, TBtypeEntityId, TBtypeEntityVersion> bRepository, IEntityRelationDataFactory <TAtypeEntityId, TAtypeEntityVersion, TBtypeEntityId, TBtypeEntityVersion> dataFactory, IExceptionLogger exceptionLogger)
 {
     _environment = new EntitySyncStateEnvironment <TAtypeEntityId, TAtypeEntityVersion, TAtypeEntity, TBtypeEntityId, TBtypeEntityVersion, TBtypeEntity> (
         mapper,
         aRepository,
         bRepository,
         dataFactory,
         this,
         exceptionLogger);
 }