public void Attach(ObjectTree tree) { foreach (object reference in tree.GetAllObjects()) { FieldInfo field = reference.GetType().GetField("Logger"); if (field != null) { field.SetValue(reference, new ActiveHook(this, tree.GetPath(reference))); } } }
public static void CopyHooks(object original, object copy) { ObjectTree originalTree = new ObjectTree(original); ObjectTree copyTree = new ObjectTree(copy); foreach (object originalReference in originalTree.GetAllObjects()) { FieldInfo field = originalReference.GetType().GetField("Logger"); if (field != null) { object hook = field.GetValue(originalReference); if (hook is ActiveHook) { string path = originalTree.GetPath(originalReference); if (copyTree.Contains(path)) { object copyReference = copyTree.GetObject(path); field.SetValue(copyReference, (hook as ActiveHook).Clone()); } } } } }