Example #1
0
        private void PrepareCloneGraph()
        {
            // Visit the object graph in order to determine which objects to clone
            this.PrepareObjectCloneGraph(this.sourceRoot, this.targetRoot, null, CloneBehavior.ChildObject);
            this.localBehavior.Clear();

            // Determine which weak references to keep
            if (this.dropWeakReferences.Count > 0)
            {
                foreach (object source in this.targetMapping.Keys)
                {
                    this.dropWeakReferences.Remove(source);
                    if (this.dropWeakReferences.Count == 0)
                    {
                        break;
                    }
                }
            }

            // Perform late setup for surrogate objects that required it
            foreach (LateSetupEntry lateSetup in this.lateSetupSchedule)
            {
                CloneType       typeData  = GetCloneType((lateSetup.Source ?? lateSetup.Target).GetType());
                ICloneSurrogate surrogate = typeData.Surrogate;

                object lateSetupTarget = lateSetup.Target;
                surrogate.LateSetup(lateSetup.Source, ref lateSetupTarget, this);
                this.SetTargetOf(lateSetup.Source ?? lateSetup.Target, lateSetupTarget);
            }
        }
Example #2
0
        private void PrepareCloneGraph()
        {
            // Visit the object graph in order to determine which objects to clone
            this.PrepareObjectCloneGraph(this.sourceRoot, this.targetRoot, null, CloneBehavior.ChildObject);
            this.localBehavior.Clear();

            // Perform late setup for surrogate objects that required it
            foreach (LateSetupEntry lateSetup in this.lateSetupSchedule)
            {
                CloneType       typeData  = GetCloneType((lateSetup.Source ?? lateSetup.Target).GetType());
                ICloneSurrogate surrogate = typeData.Surrogate;

                object lateSetupTarget = lateSetup.Target;
                surrogate.LateSetup(lateSetup.Source, ref lateSetupTarget, this);
                this.SetTargetOf(lateSetup.Source ?? lateSetup.Target, lateSetupTarget);
            }
        }