Af og til har man behov for at åbne op for konfigurationelle egenskaber, der er mere en blot at have værdier i <appSettings>. Her er en måde, hvorpå man kan tilpasse konfiguration efter eget behov.

Vi kan fx. have brug for en liste af server navne, hvor vi antager at bruge server navnet til noget i koden.

Vi opretter en fil fx. 'ServerNavnKonfiguration.cs', med følgende kode:

public class ServerKonfigurationSektion : ConfigurationSection {
    [ConfigurationProperty("server")]
    public ServerElementCollection Server {
        get { return (ServerElementCollection)this["server"]; }
    }
}
public class ServerKonfigurationsElement : ConfigurationElement {
    [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
    public string Navn {
        get { return (string) this["name"]; }
    }
}
public class ServerElementCollection : ConfigurationElementCollection {
    protected override ConfigurationElement CreateNewElement() {
        return new ServerKonfigurationsElement();
    }
    protected override object GetElementKey(ConfigurationElement element) {
        return ((ServerKonfigurationsElement)element).Navn;
    }
}


Dette vil åbne op for følgende struktur i web.config eller app.config filen.

<serverOversigt>
    <server>
      <add name="ServerNavn1" />
      <add name="ServerNavn2" />
      <add name="ServerNavn3" />
   </server>
</serverOversigt>


Under <ConfigSections> skal følgende konfiguration registreres:

<section name="serverOversigt" 
type="MinApp.MitProject.ServerKonfigurationSektion, MinApp.MitProject"
requirePermission="false" />
</configSections>


Så kan servernavnene i konfigurationen hentes på følgende måde:

var sektioner = new ArrayList(((ServerKonfigurationSektion)ConfigurationManager
                    .GetSection("serverOversigt")).Server);
var serverNavne = (sektioner.Cast<ServerKonfigurationsElement>()
                    .Select(server => server.Navn)).ToArray();
 
foreach (var serverNavn in serverNavne) {
    ...
    ...
    ...
}


Er der behov for flere værdier i konfigurationen, fx en server Url, kan denne property tilføjes i ServerKonfigurationsElement. Herefter kan Url tilføjes i konfigurations filen:
<add name="ServerNavn1" url="minUrl" />

Værdien kan også tilgås med LINQ.

var serverVaerdier = (sektioner.Cast<ServerKonfigurationsElement>()
                    .Select(server => new {server.Navn, server.Url})).ToArray();