IgnorePropertiesAttribute.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataWeb / Server / System / Data / Services / IgnorePropertiesAttribute.cs / 1 / IgnorePropertiesAttribute.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      CLR attribute to be annotated on types which indicate the list of properties
//      to ignore. 
//  
//
// @owner  [....] 
//---------------------------------------------------------------------

namespace System.Data.Services
{ 
    using System;
    using System.Collections.Generic; 
    using System.Collections.ObjectModel; 
using System.Reflection;
using System.Diagnostics; 
    using System.Data.Services.Providers;

    /// Attribute to be annotated on types with ETags.
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments", Justification = "Processed values are available.")] 
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public sealed class IgnorePropertiesAttribute : System.Attribute 
    { 
        /// Name of the properties that form the ETag.
        private readonly ReadOnlyCollection propertyNames; 

        // This constructor was added since string[] is not a CLS-compliant type and
        // compiler gives a warning as error saying this attribute doesn't have any
        // constructor that takes CLS-compliant type 

        ///  
        /// Initializes a new instance of IgnoreProperties attribute with the property name 
        /// that needs to be ignored
        ///  
        /// Name of the property that form the ETag for the current type.
        public IgnorePropertiesAttribute(string propertyName)
        {
            WebUtil.CheckArgumentNull(propertyName, "propertyName"); 
            this.propertyNames = new ReadOnlyCollection(new List(new string[1] { propertyName }));
        } 
 
        /// 
        /// Initializes a new instance of IgnoreProperties attribute with the list of property names 
        /// that need to be ignored
        /// 
        /// Name of the properties that form the ETag for the current type.
        public IgnorePropertiesAttribute(params string[] propertyNames) 
        {
            WebUtil.CheckArgumentNull(propertyNames, "propertyNames"); 
            if (propertyNames.Length == 0) 
            {
                throw new ArgumentException(Strings.ETagAttribute_MustSpecifyAtleastOnePropertyName, "propertyNames"); 
            }

            this.propertyNames = new ReadOnlyCollection(new List(propertyNames));
        } 

        /// Name of the properties that needs to be ignored for the current type. 
        public ReadOnlyCollection PropertyNames 
        {
            get 
            {
                return this.propertyNames;
            }
        } 

        ///  
        /// Validate and get the list of properties specified by this attribute on the given type. 
        /// 
        /// clr type on which this attribute must have defined. 
        /// whether we need to inherit this attribute or not.
        /// For context types,we need to, since we can have one context dervied from another, and we want to ignore all the properties on the base ones too.
        /// For resource types, we don't need to, since we don't want derived types to know about ignore properties of the base type. Also
        /// from derived type, you cannot change the definition of the base type. 
        /// binding flags to be used for validating property names.
        /// list of property names specified on IgnoreProperties on the given type. 
        internal static IEnumerable GetProperties(Type type, bool inherit, BindingFlags bindingFlags) 
        {
            IgnorePropertiesAttribute[] attributes = (IgnorePropertiesAttribute[])type.GetCustomAttributes(typeof(IgnorePropertiesAttribute), inherit); 
            Debug.Assert(attributes.Length == 0 || attributes.Length == 1, "There should be atmost one IgnoreProperties specified");
            if (attributes.Length == 1)
            {
                foreach (string propertyName in attributes[0].PropertyNames) 
                {
                    if (String.IsNullOrEmpty(propertyName)) 
                    { 
                        throw new InvalidOperationException(Strings.IgnorePropertiesAttribute_PropertyNameCannotBeNullOrEmpty);
                    } 

                    PropertyInfo property = type.GetProperty(propertyName, bindingFlags);
                    if (property == null)
                    { 
                        throw new InvalidOperationException(Strings.IgnorePropertiesAttribute_InvalidPropertyName(propertyName, type.FullName));
                    } 
                } 

                return attributes[0].PropertyNames; 
            }

            return WebUtil.EmptyStringArray;
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      CLR attribute to be annotated on types which indicate the list of properties
//      to ignore. 
//  
//
// @owner  [....] 
//---------------------------------------------------------------------

namespace System.Data.Services
{ 
    using System;
    using System.Collections.Generic; 
    using System.Collections.ObjectModel; 
using System.Reflection;
using System.Diagnostics; 
    using System.Data.Services.Providers;

    /// Attribute to be annotated on types with ETags.
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1019:DefineAccessorsForAttributeArguments", Justification = "Processed values are available.")] 
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public sealed class IgnorePropertiesAttribute : System.Attribute 
    { 
        /// Name of the properties that form the ETag.
        private readonly ReadOnlyCollection propertyNames; 

        // This constructor was added since string[] is not a CLS-compliant type and
        // compiler gives a warning as error saying this attribute doesn't have any
        // constructor that takes CLS-compliant type 

        ///  
        /// Initializes a new instance of IgnoreProperties attribute with the property name 
        /// that needs to be ignored
        ///  
        /// Name of the property that form the ETag for the current type.
        public IgnorePropertiesAttribute(string propertyName)
        {
            WebUtil.CheckArgumentNull(propertyName, "propertyName"); 
            this.propertyNames = new ReadOnlyCollection(new List(new string[1] { propertyName }));
        } 
 
        /// 
        /// Initializes a new instance of IgnoreProperties attribute with the list of property names 
        /// that need to be ignored
        /// 
        /// Name of the properties that form the ETag for the current type.
        public IgnorePropertiesAttribute(params string[] propertyNames) 
        {
            WebUtil.CheckArgumentNull(propertyNames, "propertyNames"); 
            if (propertyNames.Length == 0) 
            {
                throw new ArgumentException(Strings.ETagAttribute_MustSpecifyAtleastOnePropertyName, "propertyNames"); 
            }

            this.propertyNames = new ReadOnlyCollection(new List(propertyNames));
        } 

        /// Name of the properties that needs to be ignored for the current type. 
        public ReadOnlyCollection PropertyNames 
        {
            get 
            {
                return this.propertyNames;
            }
        } 

        ///  
        /// Validate and get the list of properties specified by this attribute on the given type. 
        /// 
        /// clr type on which this attribute must have defined. 
        /// whether we need to inherit this attribute or not.
        /// For context types,we need to, since we can have one context dervied from another, and we want to ignore all the properties on the base ones too.
        /// For resource types, we don't need to, since we don't want derived types to know about ignore properties of the base type. Also
        /// from derived type, you cannot change the definition of the base type. 
        /// binding flags to be used for validating property names.
        /// list of property names specified on IgnoreProperties on the given type. 
        internal static IEnumerable GetProperties(Type type, bool inherit, BindingFlags bindingFlags) 
        {
            IgnorePropertiesAttribute[] attributes = (IgnorePropertiesAttribute[])type.GetCustomAttributes(typeof(IgnorePropertiesAttribute), inherit); 
            Debug.Assert(attributes.Length == 0 || attributes.Length == 1, "There should be atmost one IgnoreProperties specified");
            if (attributes.Length == 1)
            {
                foreach (string propertyName in attributes[0].PropertyNames) 
                {
                    if (String.IsNullOrEmpty(propertyName)) 
                    { 
                        throw new InvalidOperationException(Strings.IgnorePropertiesAttribute_PropertyNameCannotBeNullOrEmpty);
                    } 

                    PropertyInfo property = type.GetProperty(propertyName, bindingFlags);
                    if (property == null)
                    { 
                        throw new InvalidOperationException(Strings.IgnorePropertiesAttribute_InvalidPropertyName(propertyName, type.FullName));
                    } 
                } 

                return attributes[0].PropertyNames; 
            }

            return WebUtil.EmptyStringArray;
        } 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK