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); } }
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); } }