コード例 #1
0
        internal void AddToTypesXmlCache(T member, bool preValidated)
        {
            if (member == null)
            {
                throw PSTraceSource.NewArgumentNullException("member");
            }
            if (!preValidated && PSMemberInfoCollection <T> .IsReservedName(member.Name))
            {
                throw new ExtendedTypeSystemException("PSObjectMembersMembersAddReservedName", null, ExtendedTypeSystem.ReservedMemberName, new object[] { member.Name });
            }
            PSMemberInfo info = member.Copy();

            if (this.mshOwner != null)
            {
                if (!preValidated)
                {
                    TypeTable typeTable = this.mshOwner.GetTypeTable();
                    if ((typeTable != null) && (typeTable.GetMembers <T>(this.mshOwner.InternalTypeNames)[member.Name] != null))
                    {
                        throw new ExtendedTypeSystemException("AlreadyPresentInTypesXml", null, ExtendedTypeSystem.MemberAlreadyPresentFromTypesXml, new object[] { member.Name });
                    }
                }
                info.ReplicateInstance(this.mshOwner);
                this.mshOwner.InstanceMembers.Add(info, preValidated);
                PSGetMemberBinder.SetHasInstanceMember(info.Name);
                PSVariableAssignmentBinder.NoteTypeHasInstanceMemberOrTypeName(PSObject.Base(this.mshOwner).GetType());
            }
            else
            {
                this.memberSetOwner.InternalMembers.Add(info, preValidated);
            }
        }
コード例 #2
0
 public override T this[string name]
 {
     get
     {
         using (PSObject.memberResolution.TraceScope("Lookup"))
         {
             if (string.IsNullOrEmpty(name))
             {
                 throw PSMemberInfoIntegratingCollection <T> .tracer.NewArgumentException(nameof (name));
             }
             PSObject particularInstance;
             if (this.mshOwner != null)
             {
                 this.EnsureReservedMemberIsLoaded(name);
                 PSMemberInfo instanceMember = this.mshOwner.InstanceMembers[name];
                 particularInstance = this.mshOwner;
                 if (instanceMember is T obj)
                 {
                     PSObject.memberResolution.WriteLine("Found PSObject instance member: {0}.", (object)name);
                     return(obj);
                 }
             }
             else
             {
                 PSMemberInfo internalMember = this.memberSetOwner.InternalMembers[name];
                 particularInstance = this.memberSetOwner.instance;
                 if (internalMember is T obj)
                 {
                     PSObject.memberResolution.WriteLine("Found PSMemberSet member: {0}.", (object)name);
                     internalMember.ReplicateInstance(particularInstance);
                     return(obj);
                 }
             }
             foreach (CollectionEntry <T> collection in this.collections)
             {
                 T obj = collection.GetMember(particularInstance, name);
                 if ((object)obj != null)
                 {
                     if (collection.ShouldCloneWhenReturning)
                     {
                         obj = (T)obj.Copy();
                     }
                     if (collection.ShouldReplicateWhenReturning)
                     {
                         obj.ReplicateInstance(particularInstance);
                     }
                     return(obj);
                 }
             }
             return(default(T));
         }
     }
 }
コード例 #3
0
        internal static object GeneratePSExtendedMemberSet(object obj)
        {
            PSObject     mshObject = PSObject.AsPSObject(obj);
            PSMemberInfo member    = mshObject.InstanceMembers["psextended"];

            if (member == null)
            {
                PSMemberSet set = new PSMemberSet("psextended", mshObject)
                {
                    ShouldSerialize  = false,
                    isHidden         = true,
                    isReservedMember = true
                };
                member = set;
                member.ReplicateInstance(mshObject);
                member.instance = mshObject;
                mshObject.InstanceMembers.Add(member);
            }
            return(member);
        }
コード例 #4
0
        internal void AddToTypesXmlCache(T member, bool preValidated)
        {
            if ((object)member == null)
            {
                throw PSMemberInfoIntegratingCollection <T> .tracer.NewArgumentNullException(nameof (member));
            }
            if (!preValidated && PSMemberInfoCollection <T> .IsReservedName(member.Name))
            {
                throw new ExtendedTypeSystemException("PSObjectMembersMembersAddReservedName", (Exception)null, "ExtendedTypeSystem", "ReservedMemberName", new object[1]
                {
                    (object)member.Name
                });
            }
            PSMemberInfo member1 = member.Copy();

            if (this.mshOwner != null)
            {
                if (!preValidated)
                {
                    TypeTable typeTable = this.mshOwner.GetTypeTable();
                    if (typeTable != null && (object)typeTable.GetMembers <T>(this.mshOwner.InternalTypeNames)[member.Name] != null)
                    {
                        throw new ExtendedTypeSystemException("AlreadyPresentInTypesXml", (Exception)null, "ExtendedTypeSystem", "MemberAlreadyPresentFromTypesXml", new object[1]
                        {
                            (object)member.Name
                        });
                    }
                }
                member1.ReplicateInstance(this.mshOwner);
                this.mshOwner.InstanceMembers.Add(member1, preValidated);
            }
            else
            {
                this.memberSetOwner.InternalMembers.Add(member1, preValidated);
            }
        }