Пример #1
0
        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);
 }