Custom app.config Config Section Handler
Asked Answered
M

1

31

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>
Mirella answered 17/4, 2009 at 4:10 Comment(2)
You should also check out Jon Rista's three-part series on .NET 2.0 configuration up on CodeProject. - Unraveling the mysteries of .NET 2.0 configuration - Decoding the mysteries of .NET 2.0 configuration - Cracking the mysteries of .NET 2.0 configuration Highly recommended, well written and extremely helpful!Cacciatore
Also, if you find yourself creating configuration sections frequently, there's the Configuration Section Designer, a graphical Domain-Specific Language designer for designing configuration sections.Nellenelli
B
31

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:

Boynton answered 17/4, 2009 at 4:26 Comment(2)
Links have broken over timeRecollect
@Recollect if you want another sample implementation I made one here: https://mcmap.net/q/238141/-how-to-get-a-list-lt-string-gt-collection-of-values-from-app-config-in-wpfBengal

© 2022 - 2024 — McMap. All rights reserved.