В приложениях .Net мы часто видим, что проекты проектов, созданные для нас VS, будут содержать такие файлы, как App.config или Web.config. Этот файл мы называем файлом конфигурации приложения. Этот файл описывает некоторую информацию, связанную с нашим приложением, например подключение к базе данных, режим аутентификации и т. д. В программе мы можем использовать свойство ConnectionStrings ConfigurationManager для удобного получения информации о строке подключения к базе данных в файле конфигурации.
Но иногда нам нужно расширить его и добавить некоторые собственные элементы вместо того, чтобы просто использовать конфигурацию по умолчанию. Например, нам может потребоваться динамически загружать класс и инициализировать его при запуске программы, но этот класс или данные инициализации нам неизвестны во время разработки программы. Я думаю, что каждый сталкивался с такой проблемой, поэтому не буду здесь подробно ее объяснять. Лучший способ — записать эти вещи, которые могут измениться, в файл конфигурации. Если вы уверены, вам нужно только изменить файл конфигурации, вместо того, чтобы тратить 30 секунд на открытие VS, когда продукт собирается подключиться к сети. код.
Добавление некоторых пользовательских элементов в файл конфигурации легко и занимает всего два шага:
1. Зарегистрируйте имя узла, который вы хотите определить, и обработчик раздела конфигурации, используемый для обработки узла, в узле <configSections>. Код выглядит следующим образом:
1 <configSections>2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. Добавьте настроенные узлы в соответствующие места. Код выглядит следующим образом:
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <default Factory="sql"></default> 6 <factorys> 7 <add name="sql" Assembly="Hello.Data" class="SqlDbFactory" /> 8 <add name="oracle" Assembly="Hello.Data" class="OracleDbFactory" /> 9 </ фабрики>10 </dbFactory>
Пользовательский узел был добавлен, но как нам получить эту информацию о конфигурации в программе? Я считаю, что многие из вас являются экспертами в использовании XML. Если вы используете некоторые классы в System. Это действительно так. Мастер действительно мастер, я им очень восхищаюсь. Но если это реализовано таким образом, мне действительно не нужно писать этот пост в блоге.
Платформа .Net реализует множество API-интерфейсов конфигурации, которые позволяют нам упростить операции с файлами конфигурации. На первом этапе мы упомянули обработчик раздела конфигурации, который используется для чтения и записи нашей настроенной информации об узле. Итак, как нам реализовать обработчик раздела конфигурации? Во-первых, давайте взглянем на связанные классы и концепции.
ConfigurationSection: пользовательские узлы должны наследовать этот класс, чтобы обеспечить индивидуальную обработку и программный доступ к пользовательскому разделу конфигурации.
ConfigurationElement: представляет элемент в файле конфигурации.
ConfigurationElementCollection: представляет элемент конфигурации, содержащий коллекцию дочерних элементов.
Используя эти классы, мы можем резюмировать, что в файле конфигурации существует два типа элементов конфигурации.
Во-первых, одиночный элемент конфигурации — это элемент, который наследуется от ConfigurationElement и не содержит дочерних элементов.
Во-вторых, элемент конфигурации коллекции — это элемент, унаследованный от ConfigurationElementCollection, который содержит коллекцию дочерних элементов.
Концепции часто относительно абстрактны. Чтобы понять эти вещи, нам следует подробно объяснить их на основе примеров, которые мы привели выше.
В разделе конфигурации <dbFactory> есть два элемента, а именно <default> и <factorys>, а элемент <factorys> содержит два подэлемента. Итак, здесь <default> — это один элемент конфигурации, а <factorys> — это элемент конфигурации коллекции. Нам необходимо реализовать классы и их свойства, соответствующие этим элементам соответственно.
Элемент <default>: это элемент одного типа, поэтому мы наследуем ConfigurationElement. В этом элементе есть атрибут фабрики, поэтому мы определяем его соответствующим образом в классе. Код выглядит следующим образом:
код
общедоступный класс DefaultElement: ConfigurationElement {[ConfigurationProperty("фабрика")] public string Factory { get { return this["factory"] as string; } set {this["factory"] = value;
Примечание. Нам необходимо зарегистрировать атрибут ConfigurationProperty свойства над определением свойства.
Дочерние элементы <фабрики>:
код
public class FactoryElement : ConfigurationElement {[ConfigurationProperty("name")] public string Name { get { return this["name"] as string; } set { this["name"] = value; } } [ConfigurationProperty("assembly" )] public string Assembly { get { return this["assembly"] as string; } set { this["assembly"] = value; } } [ConfigurationProperty("class")] public string Class { get { return this[" class"] как строка; } set { this["class"] = value; } } }
Элемент <factorys> является элементом коллекции и наследует ConfigurationElementCollection.
код
общественный класс FactoryElements: ConfigurationElementCollection {защищенное переопределение ConfigurationElement CreateNewElement () {возврат нового FactoryElement () } защищенный объект переопределения GetElementKey (элемент ConfigurationElement) { return ((FactoryElement)element).Name } public FactoryElement this [имя строки] { get { вернуть BaseGet(имя) как FactoryElement } } };
Класс ConfigurationElementCollection является абстрактным классом, и вам следует явно реализовать его методы CreateNewElement и GetElementKey.
Узел <dbFactory>, унаследованный от ConfigurationSection.
код
общественный класс DbFactorySection: ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { get { return this["default"] as DefaultElement; } set { this["default"] = value; } } [ConfigurationProperty("factorys" )] public FactoryElements Factory { get { return this["factorys"] as FactoryElements } set { this["factorys"] = value;
Обработчик раздела конфигурации наконец-то завершен. Поместите эти четыре класса в один каталог проекта и скомпилируйте их в DLL. Если вам нужно получить информацию о конфигурации, обратитесь к этой DLL и используйте раздел DbFactorySection = ConfigurationManager.GetSection( "dbFactory" ) в качестве DbFactorySection. Попробуйте?