public void AddReference(object reference) { if (reference == null) { throw new ArgumentNullException(nameof(reference)); } if (_pendingForCreationReferenceCount.ContainsKey(reference)) { _pendingForCreationReferenceCount[reference]++; return; } SyncSource syncSource = _referencePool.GetSyncObject(reference); if (syncSource == null) { ISyncSourceFactory sourceFactory = Settings.SyncSourceFactoryResolver .FindMatchingSyncSourceFactory(reference); int referenceId = _referenceIdIncrementer++; _pendingForCreationReferenceCount[reference] = 1; syncSource = sourceFactory.Create(this, referenceId, reference, _fieldDeserializerResolver); syncSource.ReferenceCount = _pendingForCreationReferenceCount[reference]; _pendingForCreationReferenceCount.Remove(reference); _referencePool.AddSyncObject(referenceId, syncSource); _addedSyncSourceObjects.Add(syncSource); } else { _removedSyncSourceObjects.Remove(syncSource); syncSource.ReferenceCount++; } }
public void AddSyncSourceObjectFactory(ISyncSourceFactory syncTargetFactory) { _syncSourceObjectFactories.Add(syncTargetFactory); }