2009-04-17 7 views
26

Wie kann ich die Liste der "Seiten" über eine Klasse, die von System.Configuration.Section erbt, korrekt übernehmen, wenn ich eine app.config wie diese verwendet habe?Benutzerdefiniert app.config Config Section Handler

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

Antwort

26

Zuerst fügen Sie eine Eigenschaft in der Klasse, die Abschnitt erstreckt:

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

Dann müssen Sie eine PageCollection Klasse. Alle Beispiele, die ich gesehen habe, sind ziemlich identisch, also kopiere einfach this one und benenne "NamedService" in "Page" um.

schließlich eine Klasse hinzufügen, die ObjectConfigurationElement erweitert:

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; 
     } 
    } 
} 

Hier sind einige Dateien aus einer Beispielimplementierung:

+0

Links haben im Laufe der Zeit gebrochen – Hoppe

+0

@Hoppe, wenn Sie eine andere Beispielimplementierung möchten, habe ich hier gemacht: http://Stackoverflow.com/a/33544322/1955317 – Squazz

3

Wenn Sie häufig Konfigurationsabschnitte erstellen, gibt es auch den Configuration Section Designer, einen grafischen domänenspezifischen Sprachen-Designer zum Entwerfen von Konfigurationsabschnitten.