Прочитать на английском

Поделиться через


ConfigurationElement Класс

Определение

Представляет элемент конфигурации в файле конфигурации.

C#
public abstract class ConfigurationElement
Наследование
ConfigurationElement
Производный

Примеры

В следующем примере кода показано, как реализовать пользовательский ConfigurationElement как отдельный элемент в пользовательском разделе, так и как коллекция элементов в пользовательском разделе. Пример состоит из следующих файлов:

  • Файл app.config, содержащий пользовательский раздел с именем MyUrls. Этот раздел содержит простой элемент (он не содержит никаких других элементов) и коллекцию элементов. Простой элемент имеет имя simple , а коллекция — urls.

  • Консольное приложение. Приложение считывает содержимое файла app.config и записывает сведения в консоль. В нем используются классы, производные от ConfigurationElement, ConfigurationElementCollectionи ConfigurationSection.

  • Класс с именем UrlsSection , производный ConfigurationSection от класса . Этот класс используется для доступа к разделу MyUrls в файле конфигурации.

  • Класс с именем UrlsCollection , производный ConfigurationElementCollection от класса . Этот класс используется для доступа urls к коллекции в файле конфигурации.

  • Класс с именем UrlConfigElement , производный ConfigurationElement от класса . Этот класс используется для доступа к элементу simple и членам urls коллекции в файле конфигурации.

Чтобы запустить пример, выполните следующие действия.

  1. Создайте решение с проектом консольного приложения и проектом библиотеки классов с именем ConfigurationElement.

  2. Поместите три файла класса в проект библиотеки классов, а другие файлы — в проект библиотеки консоли.

  3. В обоих проектах задайте ссылку на System.Configuration.

  4. В проекте консольного приложения задайте ссылку на проект библиотеки классов.

C#
// Set Assembly name to ConfigurationElement
using System;
using System.Configuration;
using System.Collections;

namespace Samples.AspNet
{
    // Entry point for console application that reads the 
    // app.config file and writes to the console the 
    // URLs in the custom section.  
    class TestConfigurationElement
    {
        static void Main(string[] args)
        {
            // Get current configuration file.
            System.Configuration.Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.None);

            // Get the MyUrls section.
            UrlsSection myUrlsSection =
                config.GetSection("MyUrls") as UrlsSection;

            if (myUrlsSection == null)
            {
                Console.WriteLine("Failed to load UrlsSection.");
            }
            else
            {
                Console.WriteLine("The 'simple' element of app.config:");
                Console.WriteLine("  Name={0} URL={1} Port={2}",
                    myUrlsSection.Simple.Name,
                    myUrlsSection.Simple.Url,
                    myUrlsSection.Simple.Port);

                Console.WriteLine("The urls collection of app.config:");
                for (int i = 0; i < myUrlsSection.Urls.Count; i++)
                {
                    Console.WriteLine("  Name={0} URL={1} Port={2}",
                        myUrlsSection.Urls[i].Name,
                        myUrlsSection.Urls[i].Url,
                        myUrlsSection.Urls[i].Port);
                }
            }
            Console.ReadLine();
        }
    }
}
C#
using System;
using System.Configuration;
using System.Collections;

namespace Samples.AspNet
{
    // Define a custom section containing an individual
    // element and a collection of elements.
    public class UrlsSection : ConfigurationSection
    {
        [ConfigurationProperty("name", 
            DefaultValue = "MyFavorites",
            IsRequired = true, 
            IsKey = false)]
        [StringValidator(InvalidCharacters = 
            " ~!@#$%^&*()[]{}/;'\"|\\",
            MinLength = 1, MaxLength = 60)]
        public string Name
        {

            get
            {
                return (string)this["name"];
            }
            set
            {
                this["name"] = value;
            }
        }

        // Declare an element (not in a collection) of the type
        // UrlConfigElement. In the configuration
        // file it corresponds to <simple .... />.
        [ConfigurationProperty("simple")]
        public UrlConfigElement Simple
        {
            get
            {
                UrlConfigElement url =
                (UrlConfigElement)base["simple"];
                return url;
            }
        }

        // Declare a collection element represented 
        // in the configuration file by the sub-section
        // <urls> <add .../> </urls> 
        // Note: the "IsDefaultCollection = false" 
        // instructs the .NET Framework to build a nested 
        // section like <urls> ...</urls>.
        [ConfigurationProperty("urls",
            IsDefaultCollection = false)]
        public UrlsCollection Urls
        {
            get
            {
                UrlsCollection urlsCollection =
                (UrlsCollection)base["urls"];
                return urlsCollection;
            }
        }

        protected override void DeserializeSection(
            System.Xml.XmlReader reader)
        {
            base.DeserializeSection(reader);
            // You can add custom processing code here.
        }

        protected override string SerializeSection(
            ConfigurationElement parentElement,
            string name, ConfigurationSaveMode saveMode)
        {
            string s =
                base.SerializeSection(parentElement,
                name, saveMode);
            // You can add custom processing code here.
            return s;
        }
    }
}
C#
using System;
using System.Configuration;
using System.Collections;

namespace Samples.AspNet
{
    public class UrlsCollection : ConfigurationElementCollection
    {
        public UrlsCollection()
        {
            // Add one url to the collection.  This is
            // not necessary; could leave the collection 
            // empty until items are added to it outside
            // the constructor.
            UrlConfigElement url = 
                (UrlConfigElement)CreateNewElement();
            Add(url);
        }

        public override 
            ConfigurationElementCollectionType CollectionType
        {
            get
            {
                return 

                    ConfigurationElementCollectionType.AddRemoveClearMap;
            }
        }

        protected override 
            ConfigurationElement CreateNewElement()
        {
            return new UrlConfigElement();
        }

        protected override 
            ConfigurationElement CreateNewElement(
            string elementName)
        {
            return new UrlConfigElement(elementName);
        }

        protected override Object 
            GetElementKey(ConfigurationElement element)
        {
            return ((UrlConfigElement)element).Name;
        }

        public new string AddElementName
        {
            get
            { return base.AddElementName; }

            set
            { base.AddElementName = value; }
        }

        public new string ClearElementName
        {
            get
            { return base.ClearElementName; }

            set
            { base.ClearElementName = value; }
        }

        public new string RemoveElementName
        {
            get
            { return base.RemoveElementName; }
        }

        public new int Count
        {
            get { return base.Count; }
        }

        public UrlConfigElement this[int index]
        {
            get
            {
                return (UrlConfigElement)BaseGet(index);
            }
            set
            {
                if (BaseGet(index) != null)
                {
                    BaseRemoveAt(index);
                }
                BaseAdd(index, value);
            }
        }

        new public UrlConfigElement this[string Name]
        {
            get
            {
                return (UrlConfigElement)BaseGet(Name);
            }
        }

        public int IndexOf(UrlConfigElement url)
        {
            return BaseIndexOf(url);
        }

        public void Add(UrlConfigElement url)
        {
            BaseAdd(url);
            // Add custom code here.
        }

        protected override void 
            BaseAdd(ConfigurationElement element)
        {
            BaseAdd(element, false);
            // Add custom code here.
        }

        public void Remove(UrlConfigElement url)
        {
            if (BaseIndexOf(url) >= 0)
                BaseRemove(url.Name);
        }

        public void RemoveAt(int index)
        {
            BaseRemoveAt(index);
        }

        public void Remove(string name)
        {
            BaseRemove(name);
        }

        public void Clear()
        {
            BaseClear();
            // Add custom code here.
        }
    }
}
C#
using System;
using System.Configuration;
using System.Collections;

namespace Samples.AspNet
{
    public class UrlConfigElement : ConfigurationElement
    {
        // Constructor allowing name, url, and port to be specified.
        public UrlConfigElement(String newName,
            String newUrl, int newPort)
        {
            Name = newName;
            Url = newUrl;
            Port = newPort;
        }

        // Default constructor, will use default values as defined
        // below.
        public UrlConfigElement()
        {
        }

        // Constructor allowing name to be specified, will take the
        // default values for url and port.
        public UrlConfigElement(string elementName)
        {
            Name = elementName;
        }

        [ConfigurationProperty("name", 
            DefaultValue = "Microsoft",
            IsRequired = true, 
            IsKey = true)]
        public string Name
        {
            get
            {
                return (string)this["name"];
            }
            set
            {
                this["name"] = value;
            }
        }

        [ConfigurationProperty("url",
            DefaultValue = "http://www.microsoft.com",
            IsRequired = true)]
        [RegexStringValidator(@"\w+:\/\/[\w.]+\S*")]
        public string Url
        {
            get
            {
                return (string)this["url"];
            }
            set
            {
                this["url"] = value;
            }
        }

        [ConfigurationProperty("port",
            DefaultValue = (int)0,
            IsRequired = false)]
        [IntegerValidator(MinValue = 0,
            MaxValue = 8080, ExcludeRange = false)]
        public int Port
        {
            get
            {
                return (int)this["port"];
            }
            set
            {
                this["port"] = value;
            }
        }

        protected override void DeserializeElement(
           System.Xml.XmlReader reader, 
            bool serializeCollectionKey)
        {
            base.DeserializeElement(reader, 
                serializeCollectionKey);
            // You can your custom processing code here.
        }

        protected override bool SerializeElement(
            System.Xml.XmlWriter writer, 
            bool serializeCollectionKey)
        {
            bool ret = base.SerializeElement(writer, 
                serializeCollectionKey);
            // You can enter your custom processing code here.
            return ret;
        }

        protected override bool IsModified()
        {
            bool ret = base.IsModified();
            // You can enter your custom processing code here.
            return ret;
        }
    }
}

Комментарии

ConfigurationElement— это абстрактный класс, который используется для представления XML-элемента в файле конфигурации (например, Web.config). Элемент в файле конфигурации может содержать ноль, один или несколько дочерних элементов.

ConfigurationElement Так как класс определен как абстрактный, создать его экземпляр нельзя. Из него можно наследовать только классы. Платформа .NET Framework включает классы, производные ConfigurationElement от класса , для представления стандартных элементов конфигурации XML, таких как ConfigurationSection. Вы также можете расширить класс для ConfigurationElement доступа к пользовательским элементам конфигурации и разделам. В примере, приведенном далее в этом разделе, показано, как получить доступ к пользовательским элементам конфигурации и разделам с помощью пользовательских классов, производных от ConfigurationElement.

Можно также расширить стандартные типы конфигурации, такие как ConfigurationElement, ConfigurationElementCollection, ConfigurationPropertyи ConfigurationSection. Дополнительные сведения см. в документации по этим классам.

Дополнительные сведения о том, как получить доступ к информации в файлах конфигурации, см. в ConfigurationManager разделе класс и WebConfigurationManager класс .

Примечания для тех, кто реализует этот метод

Каждый ConfigurationElement объект создает внутреннюю ConfigurationPropertyCollection коллекцию ConfigurationProperty объектов , которая представляет атрибуты элемента или коллекцию дочерних элементов.

Ненастраимые сведения и функциональные возможности содержатся в объекте ElementInformation , предоставленном свойством ElementInformation .

Для создания пользовательского элемента конфигурации можно использовать либо программную, либо декларативную (атрибутивную) модель кодирования:

  • Программная модель требует, чтобы для каждого атрибута элемента было создано свойство, чтобы получить или задать его значение, и добавить его во внутренний контейнер свойств базового ConfigurationElement класса. Пример использования этой модели см. в ConfigurationSection разделе класс .

  • Более простая декларативная модель, также называемая моделью с атрибутами, позволяет определить атрибут элемента с помощью свойства , а затем украсить его атрибутами. Эти атрибуты указывают системе конфигурации ASP.NET о типах свойств и их значениях по умолчанию. На основе этих сведений, полученных с помощью отражения, система конфигурации ASP.NET создает объекты свойств элемента и выполняет необходимую инициализацию. В примере, приведенном далее в этом разделе, показано, как использовать эту модель.

Конструкторы

ConfigurationElement()

Инициализирует новый экземпляр класса ConfigurationElement.

Свойства

CurrentConfiguration

Возвращает ссылку на экземпляр Configuration верхнего уровня, представляющий иерархию конфигурации, к которой относится текущий экземпляр ConfigurationElement.

ElementInformation

Возвращает объект ElementInformation, содержащий неизменяемую информацию и функциональность объекта ConfigurationElement.

ElementProperty

Возвращает объект ConfigurationElementProperty, представляющий сам объект ConfigurationElement.

EvaluationContext

Возвращает объект ContextInformation для объекта ConfigurationElement.

HasContext

Возвращает значение, указывающее, имеет ли свойство CurrentConfiguration значение null.

Item[ConfigurationProperty]

Возвращает или задает свойство или атрибут данного элемента конфигурации.

Item[String]

Получает или задает свойство, атрибут или дочерний элемент данного элемента конфигурации.

LockAllAttributesExcept

Возвращает коллекцию заблокированных атрибутов.

LockAllElementsExcept

Возвращает коллекцию заблокированных элементов.

LockAttributes

Возвращает коллекцию заблокированных атрибутов.

LockElements

Возвращает коллекцию заблокированных элементов.

LockItem

Возвращает или задает значение, указывающее, заблокирован ли элемент.

Properties

Возвращает коллекцию свойств.

Методы

DeserializeElement(XmlReader, Boolean)

Считывает XML из файла конфигурации.

Equals(Object)

Сравнивает текущий экземпляр ConfigurationElement с указанным объектом.

GetHashCode()

Получает уникальное значение, представляющее текущий экземпляр ConfigurationElement.

GetTransformedAssemblyString(String)

Возвращает преобразованную версию указанного имени сборки.

GetTransformedTypeString(String)

Возвращает преобразованную версию указанного имени типа.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
Init()

Задает объект ConfigurationElement в исходное состояние.

InitializeDefault()

Используется для инициализации набора значений по умолчанию для объекта ConfigurationElement.

IsModified()

При реализации в производном классе указывает, был ли изменен данный элемент конфигурации с момента последнего сохранения или загрузки.

IsReadOnly()

Получает значение, показывающее, является ли объект ConfigurationElement доступным только для чтения.

ListErrors(IList)

Добавляет ошибку "недействительное свойство" в данном объекте ConfigurationElement и всех его дочерних элементах к переданному списку.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
OnDeserializeUnrecognizedAttribute(String, String)

Возвращает значение, указывающее, встретился ли неизвестный атрибут при десериализации.

OnDeserializeUnrecognizedElement(String, XmlReader)

Возвращает значение, указывающее, встретился ли неизвестный элемент при десериализации.

OnRequiredPropertyNotFound(String)

Выдает исключение, если требуемое свойство не найдено.

PostDeserialize()

Вызывается после десериализации.

PreSerialize(XmlWriter)

Вызывается до сериализации.

Reset(ConfigurationElement)

Восстанавливает внутреннее состояние объекта ConfigurationElement, включая блокировки и коллекции свойств.

ResetModified()

Переустанавливает значение метода IsModified() в false при реализации в производном классе.

SerializeElement(XmlWriter, Boolean)

Записывает содержание данного элемента конфигурации в файл конфигурации при реализации в производном классе.

SerializeToXmlElement(XmlWriter, String)

Записывает внешние теги данного элемента конфигурации в файл конфигурации при реализации в производном классе.

SetPropertyValue(ConfigurationProperty, Object, Boolean)

Задает для свойства указанное значение.

SetReadOnly()

Задает свойство IsReadOnly() для объекта ConfigurationElement и всех подчиненных элементов.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Unmerge(ConfigurationElement, ConfigurationElement, ConfigurationSaveMode)

Изменяет объект ConfigurationElement для удаления всех значений, которые не должны сохраняться.

Применяется к

Продукт Версии
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

См. также раздел