Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базовые технологии платформы .NET.pdf
Скачиваний:
66
Добавлен:
11.05.2015
Размер:
1.73 Mб
Скачать

//будет выведен следующий XML-фрагмент

//<Contact>

//<Name>Patrick Hines</Name>

//<Phone>206-555-0144</Phone>

//<Address>

//<Street>123 Main St</Street>

//<City>Mercer Island</City>

//<State>WA</State>

//<Postal>68402</Postal>

//</Address>

//</Contact>

28.Файлы конфигурации

Конфигурирование применяется для решения двух основных задач. Вопервых, параметры конфигурации позволяют настроить поведение CLR при выполнении кода приложения. Во-вторых, конфигурация может хранить пользовательские данные приложения.

Платформа .NET предлагает унифицированный подход к конфигурированию, основанный на использовании конфигурационных XML-файлов. Существует один глобальный файл конфигурации с параметрами, относящимися к платформе в целом. Этот файл называется machine.config и располагается в каталоге установки платформы .NET. Любая сборка может иметь локальный конфигурационный файл. Он должен носить имя файла сборки с добавлением расширения .config и располагаться в одном каталоге со сборкой (то есть файл конфигурации для main.exe должен называться main.exe.config1). Параметры, описанные в локальных конфигурационных файлах, «накладываются» на пара-

метры из файла machine.config.

Проанализируем общую схему любого файла конфигурации. Корневым XML-элементом файла является элемент <configuration>. Он может включать следующие дочерние элементы:

<configSections> – описывает разделы конфигурации (в том числе пользовательские);

<appSettings> – пользовательские параметры конфигурации; <connectionStrings> – строки подключения к источникам данных; <startup> – параметры запуска CLR (поддерживаемые версии);

<runtime> – параметры времени выполнения (регулируют способ загрузки сборок и работу сборщика мусора);

<system.diagnostics> – совокупность диагностических параметров, которые задают способ отладки, перенаправляют сообщения отладки и т. д.;

<system.net> – настройка параметров работы с сетью; <system.serviceModel> – настройка элементов технологии WCF; <system.web> – параметры конфигурации приложений ASP.NET.

1 В случае веб-приложения файл конфигурации всегда называется web.config.

112

Рассмотрим способы описания в файле конфигурации пользовательских данных. В простейшем случае для этого используется раздел <appSettings>, который может содержать следующие элементы:

<add key="name" value="the value"/> – добавляет новый ключ и значение

в коллекцию пользовательских конфигурационных данных;

<remove key="name"/> – удаляет существующий ключ и значение из коллекции конфигурационных данных;

<clear/> – очищает коллекцию конфигурационных данных.

<?xml version="1.0" encoding="utf-8" ?> <configuration>

<appSettings>

<add key="company" value="Acme, Ltd"/> <add key="year" value="2012"/>

</appSettings> </configuration>

Разработчик может создать собственный раздел конфигурационного файла. Такой раздел должен быть зарегистрирован в секции <configSections>. При регистрации раздела задаётся его обработчик – класс, который будет отвечать за превращение содержимого раздела в данные. В зависимости от типа хранимых данных можно воспользоваться одним из существующих обработчиков либо построить собственный обработчик.

<?xml version="1.0" encoding="utf-8" ?> <configuration>

<configSections>

<section name="custom" type="Common.CustomConfig, Common"/> </configSections>

<!-- пользовательская секция --> <custom>

<copyright company="Acme, Ltd" year="2012"/> </custom>

</configuration>

Если планируется использование собственного обработчика конфигурационного раздела, следует создать класс, производный от ConfigurationSection. В классе определяются открытые свойства, соответствующие XML-атрибутам или вложенным элементам конфигурации. Этим свойствам назначается специальный атрибут [ConfigurationProperty]. Следующий код показывает пример пользовательского обработчика CustomConfig.

namespace Common

{

public class CustomConfig : ConfigurationSection

{

[ConfigurationProperty("copyright", IsRequired = true)]

113

<appSettings>

public Element Copyright

{

get { return (Element) base["copyright"]; }

}

}

public class Element : ConfigurationElement

{

[ConfigurationProperty("company", IsRequired = true)] public string Company

{

get { return (string) base["company"]; } set { base["company"] = value; }

}

[ConfigurationProperty("year", IsRequired = true)] public int Year

{

get { return (int) base["year"]; } set { base["year"] = value; }

}

}

}

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

имён System.Configuration1 (сборка System.Configuration.dll). Класс имеет

следующие элементы:

1.AppSettings – коллекция-словарь пользовательских параметров;

2.ConnectionStrings – словарь строк подключения к источникам данных;

3.GetSection() – извлекает указанный раздел конфигурации;

4.OpenExeConfiguration() – открывает файл конфигурации указанной

сборки в виде объекта Configuration;

5.OpenMachineConfiguration() – открывает файл machine.config;

6.RefreshSection() – перечитывает указанный раздел конфигурации.

Покажем пример работы с коллекцией данных и пользовательским разделом конфигурации при помощи ConfigurationManager:

string name = ConfigurationManager.AppSettings["company"];

var s = (CustomConfig) ConfigurationManager.GetSection("custom"); string company = s.Copyright.Company;

int year = s.Copyright.Year;

Console.WriteLine("Copyright © {0} by {1}", year, company);

1 В веб-приложениях используется System.Web.Configuration.WebConfigurationManager.

114

Метод ConfigurationManager.OpenExeConfiguration() позволяет загрузить

конфигурацию заданной сборки в виде объекта Configuration. Это класс содержит коллекции, описывающие секции конфигурационного файла, а также методы для записи конфигурационного файла.

// получаем конфигурацию сборки common.exe

var cfg = ConfigurationManager.OpenExeConfiguration("common.exe");

// находим секцию и изменяем данные в ней

var section = (CustomConfig) cfg.Sections["custom"]; section.Copyright.Year = 2013;

// обновляем конфигурацию cfg.Save();

При работе в Visual Studio настройки приложения можно создать в окне свойств проекта (Project | Properties | Settings). Для каждого параметра указывается имя, тип и область видимости (глобальная или локальная для конкретного пользователя).

Рис. 12. Редактирование параметров приложения.

Visual Studio генерирует для работы с настройками класс Settings, размещённый в подпространстве имён Properties. Параметры настройки доступны через свойство Settings.Default. Если у параметра локальная область видимости, его можно не только прочитать, но и изменить, а затем сохранить.

Console.WriteLine(Settings.Default.Company);

Console.WriteLine(Settings.Default.Year);

Settings.Default.Year = 2013;

Settings.Default.Save();

115