Пользовательский обработчик раздела конфигурации app.config

Как правильно выбрать список «страниц» через класс, наследуемый от System.Configuration.Section, если я использовал такой app.config?

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

  <configSections>
    <section name="XrbSettings" type="Xrb.UI.XrbSettings,Xrb.UI" />
  </configSections>

  <XrbSettings>
    <pages>
      <add title="Google" url="http://www.google.com" />
      <add title="Yahoo" url="http://www.yahoo.com" />
    </pages>
  </XrbSettings>

</configuration>

person BuddyJoe    schedule 17.04.2009    source источник
comment
Вам также следует ознакомиться с серией из трех частей Джона Ристы по настройке .NET 2.0 на CodeProject. - Раскрытие тайн конфигурации .NET 2.0 - Расшифровка тайн конфигурации .NET 2.0 - Раскрыть тайны конфигурации .NET 2.0 Настоятельно рекомендуется, хорошо написано и чрезвычайно полезно!   -  person marc_s    schedule 17.04.2009
comment
Кроме того, если вы часто создаете разделы конфигурации, есть конструктор разделов конфигурации, графический домен -Специальный языковой конструктор для проектирования разделов конфигурации.   -  person John Saunders    schedule 17.04.2009


Ответы (1)


Сначала вы добавляете свойство в класс, расширяющий Section:

[ConfigurationProperty("pages", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(PageCollection), AddItemName = "add")]
public PageCollection Pages {
    get {
        return (PageCollection) this["pages"];
    }
}

Затем вам нужно создать класс PageCollection. Все примеры, которые я видел, практически идентичны, поэтому просто скопируйте этот и переименуйте "NamedService" в "Page".

Наконец, добавьте класс, расширяющий ObjectConfigurationElement:

public class PageElement : ObjectConfigurationElement {
    [ConfigurationProperty("title", IsRequired = true)]
    public string Title {
        get {
            return (string) this["title"];
        }
        set {
            this["title"] = value;
        }
    }

    [ConfigurationProperty("url", IsRequired = true)]
    public string Url {
        get {
            return (string) this["url"];
        }
        set {
            this["url"] = value;
        }
    }
}

Вот несколько файлов из примера реализации:

person Luke Quinane    schedule 17.04.2009
comment
Ссылки сломались со временем - person Hoppe; 23.07.2015
comment
@Hoppe, если вам нужен другой образец реализации, я сделал его здесь: stackoverflow.com/a/33544322/1955317 - person Squazz; 23.08.2016