Главная » C# » Маршаллинг данных конфигурационного файла в Visual C# (Sharp)

0

Когда  мы  хотим  использовать  в  конфигурационном   файле  специальный  узел, то нам нужно реализовать специальный класс, производный от класса System.Configuration.ConfigurationSection. Этот специальный класс требуется для обработки  и структурирования данных в конфигурационном  файле  в формат, в котором пользователь может манипулировать ими. Иными словами, мы маршаллизуем данные из конфигурационного файла в среду .NET.

Инфраструктура   .NET   предоставляет  средства  для   облегчения   маршаллизации в виде типов классов, которые позволяют явно связывать атрибут или  ключевое слово XML с какой-либо переменной. Например, допустим, вы хотите создать пекрестную ссылку между XML-атрибутом easyname и типом .NET. Для этого сначала нужно с помощью типа conf igurationProperty определить характер и тип свойства, как показано в следующем коде:

_propEasyName = new ConfigurationProperty(

"easyname", typeof(string),

null, ConfigurationPropertyOptions.IsRequired);

Конструктор conf igurationProperty имеет четыре параметра:

• "easyname" —  определяет  идентификатор  атрибута  XML,  для  которого  будет создана перекрестная ссылка;

• typeof (string) —  указывает тип  атрибута,  который  также  может  содержать

double или int для указания числа;

• null — указывает значение по умолчанию атрибута, если атрибут отсутствует;

• conf igurationPropertyOptions. IsRequired— указывает определенные характистики атрибута; в данном примере задано, что атрибут является обязательным.

ПРИМЕЧАНИЕ

Для типа ConfigurationProperty существуют множественные конструкторы. Долнительную информацию  по данному  вопросу можно  найти в документации MSDN (http://msdn2.microsoft.com/en-us/library/system.configuration.configurationproperty

.configurationproperty.aspx).

Определив свойство, для него необходимо создать перекрестную ссылку на свотво И базовый класс Conf igurationSection:

[ConfigurationProperty("easyname", IsRequired = true)] public string EasyName {

get {

return (string)base[_propEasyName];

}

}

При  каждом  обращении  к  свойству  EaseName ассоциированные  с  этим  свойсом атрибуты предоставляют перекрестную ссылку с конфигурационным файлом.

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

Далее приводится  полный  исходный код обработчика XML-узла <ioader> (добав-

ляетс я   в  сборк у  Definitions): using System.Configuration;

namespace Definitions

{

public class LoaderSection : ConfigurationSection { static ConfigurationProperty _propEasyName; static ConfigurationProperty _propTypeName; static ConfigurationProperty „propAssemblyName;

static ConfigurationPropertyCollection „properties;

static LoaderSection() {

_propEasyName = new ConfigurationProperty(

"easyname", typeof(string),

null, ConfigurationPropertyOptions.IsRequired);

_propTypeName = new ConfigurationProperty(

"typename", typeof(string),

null, ConfigurationPropertyOptions.IsRequired);

_propAssemblyName = new ConfigurationProperty(

"assemblyname", typeof(string),

null,  ConfigurationPropertyOptions.IsRequired);

„properties = new ConfigurationPropertyCollection();

„properties.Add(_propEasyName);

„properties.Add(_propTypeName);

„properties.Add(_propAssemblyName);

}

[ConfigurationProperty("easyname", IsRequired = true)] public string EasyName {

get {

return  (string)base[„propEasyName];

}

}

[ConfigurationProperty("typename", IsRequired = true)] public string TypeName {

get {

return  (string)base[„propTypeName];

}

}

[ConfigurationPropertyC’assemblyname", IsRequired = true)] public string AssemblyName {

get {

return  (string)base[_propAssemblyName];

}

}

}

}

Класс Loadersection выполняет две задачи: сообщает конфигурационной инфртруктуре о требованиях Loadersection и предоставляет легкий в использовании интерфейс API  к  конфигурационным данным. В то время как выполнение  первой задачи является приятной возможностью, вторая возможность является абсолютно необходимой.

Объявление многих компонентов структуры данных как  stati c  объясняется тем, что мы используем эти члены данных в качестве опорных, чтобы облегчить поление значений для членов данных. Чтобы разобраться с происходящим в этом ке, рассмотрим пример извлечения значений из конфигурационного файла.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии