Ejemplo n.º 1
0
        public void SetWorkingMember(TypeMemberInfo member)
        {
            if (member == null)
            {
                throw new ArgumentNullException("member");
            }

            CaptureStack.Peek().CurrentMember = member;
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
                    }
                }
            }
        }
Ejemplo n.º 5
0
 public void StartLateBindingCapture(Type type)
 {
     CaptureStack.Push(new CaptureSet(type));
 }