- Хроники. - -
Конфигурационные секции. Web.config и App.config для «C# продолжающих».
Posted By Ikutsin On 23 сентября 2011 @ 9:36 In .NET C# | Comments Disabled
[1]Этим постом я начну короткий цикл статей о конфигурационных файлах. Казалось бы, что может быть проще редактирования конфиг файлов, тем не менее есть несколько моментов, которые могут показаться сложными для начинающего или даже неизвестными для «продолжающего си шарпера». Нет, это статья не о мало известных секциях и даже не о том том как круто можно загружать чужие конфиги или сохранять их программно. Обо всем по порядку:
В «кастомных» секциях нет ничего особенного или непонятного. Я настолько часто создаю секции для коллекций, что мне просто необходимо место где я могу взять пример кода быстро настроив его под свои нужды. Я покажу как создавать коллекции, так как это, на мой взгляд самый частый вариант их использования. К тому же этот пример можно легко переделать практически под любые нужды.
public class ConsoleConfigSection : ConfigurationSection { public static ConsoleConfigSection GetConfig() { return (ConsoleConfigSection)ConfigurationManager. GetSection("console") ?? new ConsoleConfigSection(); } [ConfigurationProperty("kvp")] public NameValueConfigElementCollection Kvp { get { return (NameValueConfigElementCollection)this["kvp"] ?? new NameValueConfigElementCollection(); } } [ConfigurationProperty("prop", IsKey = true, IsRequired = true)] public string Prop { get { return this["prop"] as string; } } }
Для наглядности, тут 2 поля: kvp — коллекция, и name — обычное свойство.
Этот класс описывает коллекцию с дополнительным свойством disabled.
public class NameValueConfigElementCollection : ConfigurationElementCollection { public NameValueConfigElement this[int index] { get { return base.BaseGet(index) as NameValueConfigElement; } set { if (base.BaseGet(index) != null) { base.BaseRemoveAt(index); } this.BaseAdd(index, value); } } protected override ConfigurationElement CreateNewElement() { return new NameValueConfigElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((NameValueConfigElement)element).Name; } [ConfigurationProperty("disabled", IsKey = true)] public bool Disabled { get { return (bool)this["disabled"]; } } }
Этот класс описывает свойства одного элемента в коллекции.В этом примере у него одно поле обязательно — name а одно — value — нет.
public class NameValueConfigElement : ConfigurationElement { [ConfigurationProperty("name", IsKey = true, IsRequired = true)] public string Name { get { return this["name"] as string; } } [ConfigurationProperty("value", IsRequired = false)] public string Value { get { return this["value"] as string; } } }
Для этого нужно добавить описание секции и саму секцию в конфигурационный файл
<configuration> <configSections> <section name="console" type="BinaryAnalysis.Terminal.ConsoleConfigSection, BinaryAnalysis.Terminal"/> </configSections> <console prop="myProp"> <kvp disabled="true"> <add name="myName" value="myValue" /> </kvp> </console> </configuration>
В итоге, читаем секцию из кода:
ConsoleConfigSection.GetConfig().Kvp .Cast<NameValueConfigElement>() .Select(x => x.Name).ToArray();
В следующей статье я расскажу как шифровать любую секцию.
Article printed from Хроники.:
URL to article: /2193-konfiguracionnye-sekcii-web-config-i-app-config-dlya-c-prodolzhayushhix
URLs in this post:
[1] Image: /wp-content/uploads/2011/09/csharp.png
Click here to print.
Copyright © 2008 Все, что меня окружает. All rights reserved.