Главная » C# » Усовершенствование конфигурационного файла в Visual C# (Sharp)

0

Определения   в   созданном   нами   конфигурационном   файле   несколько   топорны, т. к. все имеющиеся типы сохраняются  в  единственной  паре  "ключ  = значение". Было бы лучше иметь возможность определять в  конфигурационном  файле  оельные элементы,  как  показано  в следующем  коде:

<loader easyname="Impll" typename="Implementationsi.Implementation" assemblyname="Implementationsi.dll" />

Этот подход предпочтительней, т. к. код более  удобочитаемый и понимаемый, что понижает возможность допущения ошибки. Кроме этого, т.  к.  разные  идентификоры теперь представлены по отдельности, то больше нет надобности в создании длинной  непрерывной  строки,  содержащей  все  идентификаторы.

ПРИМЕЧАНИЕ

Для простоты мы будем пользоваться только одним динамически типом, предстаенным XML-элементом <loader> . В настоящем решении  этот подход  можно  примять с несколькими  интерфейсами  и типами.

Если вставить XML-код примера  в конфигурационный  файл  и  исполнить  приложие  .NET,  то  произойдет  ошибка  инициализации  конфигурирования.   Причиной этой ошибки является то обстоятельство, что XML-узел <loader> не является стаартным  конфигурационным  элементом,  и  поэтому для  него требуется  специальная

процедура анализа. А когда требуется специальный анализ, то конфигурационной инфраструктуре .NET необходимо указать код, который нужно исполнить. Далее приводится полный конфигурационный файл .NET, содержащий теги для спецльного анализа:

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

<configuration>

<configSections>

<section name="loader"

type="Definitions.LoaderSection,Definitions" />

</configSections >

<appSettings>

<add key= "Assemblies"

value="Impll,Implementationsl.Implementation,  Implementationsl.dll, Impl2,Implementations2.Implementation,Implementations2.dll"  />

</appSettings>

<1oader easyname="Impl1"

typename="Implementationsl.Implementation" assemblyname="Implementationsl.dll" />

</configuration

Выделенная жирным шрифтом секция кода представляет новую часть конфигурионного файла, назначение которой можно назвать "конфигурированием конфурирования". Узлы XML, расположенные в разделе <configSections>, использтся для специализации инфраструктуры анализа конфигурационной информации. В настоящем примере XML-узел <section> содержит два атрибута, которые укывают, что должна делать инфраструктура при обнаружении определенного XML- узла. Атрибут name указывает имя узла XML, а атрибут type — тип (Definitions.LoaderSection) И сборку (Definitions), которая должна обрабатать данный узел XML.

Остановимся   на  этой  стадии   и  разберемся,  что  здесь  происходит.  Узел   XML

<section> применяется  для   конфигурирования   конфигурационного   процессора с помощью динамически загружаемых типов. Это демонстрирует, что процесс дамической загрузки и исполнения модулей кода не представляет собой ничего сложного и применяется в .NET повседневно в разработке компонентов.

Так как для  конфигурирования  конфигурационной  инфраструктуры  применяются те же самые методы, что и в нашей инфраструктуре, реализация функциональнти конфигурационной  инфраструктуры  означает реализацию стандартных типов. В нашем коде тип implementationsl.implementatio n реализует интерфейс, в то время как для конфигурационной инфраструктуры нам нужно создать производный класс предопределенного класса. Любой из этих подходов является приемлемым, но, как вы увидите, создание производного класса предопределенного класса проставляет конкретное преимущество.

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

По теме:

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