.netconfigurationapp-configconfigsection

Custom app.config Config Section Handler


What is the correct way to pick up the list of "pages" via a class that inherits from System.Configuration.Section if I used a app.config like this?

<?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>

Solution

  • First you add a property in the class that extends Section:

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

    Then you need to make a PageCollection class. All the examples I've seen are pretty much identical so just copy this one and rename "NamedService" to "Page".

    Finally add a class that extends 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;
            }
        }
    }
    

    Here are some files from a sample implementation: