public void SetWorkingMember(TypeMemberInfo member) { if (member == null) { throw new ArgumentNullException("member"); } CaptureStack.Peek().CurrentMember = member; }
public void CaptureLateBinding(int id, TypeMemberInfo info) { if (id == 0) { throw new ArgumentNullException("id"); } if (info == null) { throw new ArgumentNullException("info"); } CaptureStack.Peek().CaptureNodes.Add(new CaptureNode(id, info)); }
public void CaptureLateBinding(int id) { if (id == 0) { throw new ArgumentNullException("id"); } CaptureSet set = CaptureStack.Peek(); if (set.CurrentMember == null) { throw new ReferenceException("CurrentMember of ReferenceManager is null"); } set.CaptureNodes.Add(new CaptureNode(id, set.CurrentMember)); }
public void FinishCaptures(object source) { var set = CaptureStack.Pop(); if (source.GetType() != set.Type) { throw new ReferenceException( string.Format("Source object does not match type \"{0}\" specified at the start of the capture.", set.Type.Name())); } foreach (CaptureNode node in set.CaptureNodes) { if (node.Indices != null) { if (node.MemberInfo.Type == TypeMemberInfo.MemberType.Field) { MemberReferences(node.Id) .Add(new MemberReference(source, MemberTypes.Field, node.MemberInfo.Name, node.Indices)); } else if (node.MemberInfo.Type == TypeMemberInfo.MemberType.Property) { MemberReferences(node.Id) .Add(new MemberReference(source, MemberTypes.Property, node.MemberInfo.Name, node.Indices)); } } else if (node.MemberInfo.Type == TypeMemberInfo.MemberType.Field) { MemberReferences(node.Id).Add(new MemberReference(source, MemberTypes.Field, node.MemberInfo.Name)); } else if (node.MemberInfo.Type == TypeMemberInfo.MemberType.Property) { MemberReferences(node.Id).Add(new MemberReference(source, MemberTypes.Property, node.MemberInfo.Name)); } var idList = set.CaptureNodes.Select(item => item.Id).GroupBy(x => x).Select(grp => grp.First()); foreach (int item in idList) { if (GetObject(item) != null) { UpdateObject(item, GetObject(item)); } } } }
public void StartLateBindingCapture(Type type) { CaptureStack.Push(new CaptureSet(type)); }