Außerdem kann ein Abschnitt eine Auflistung von Elementen einbetten und die Auflistung kann implizit oder explizit sein. Das folgende Beispiel zeigt eine implizite Auflistung von untergeordneten Elementen:
[ConfigurationProperty("", IsDefaultCollection=true)]
public CustomErrorCollection Errors { get; }
Diesen Code benötigen Sie, um das folgende Markup zu unterstützen:
Die Auflistung Errors ist folgendermaßen zu definieren:
[ConfigurationCollection(typeof(CustomError), AddItemName="error",
CollectionType=ConfigurationElementCollectionType.BasicMap)]
public sealed class CustomErrorCollection : ConfigurationElementCollection
{ ... }
Beachten Sie das Attribut ConfigurationCollection und die Eigenschaft AddItemName, die den Namen des untergeordneten XML-Elements bestimmt. Diese Konfigurationsauflistung wird als implizit bezeichnet, da
Dagegen sieht eine explizite Auflistung zum Beispiel wie folgt aus:
[ConfigurationProperty("tagMapping")]
public TagMapCollection TagMapping { get; }
In diesem Fall haben Sie eine normale Eigenschaft, die aber einen Auflistungstyp zurückgibt. Die typische Definition einer Auflistung, die im Konfigurationsszenario funktioniert, sieht so aus:
[ConfigurationCollection(typeof(TagMapInfo))]
public sealed class TagMapCollection : ConfigurationElementCollection
{ ... }
Die Klasse TagMapInfo wird ihrerseits mit den ConfigurationProperty-Attributen versehen (Listing 5).
Listing 5
public sealed class TagMapInfo : ConfigurationElement { [ConfigurationProperty("tagType", IsRequired=true, DefaultValue="")] public String TagType { get; set; } : }
Basierend auf dieser Konfiguration können Sie das Markup aus Listing 6 schreiben.
Listing 6
Der Stammabschnitt (in diesem Fall
Zusammenfassung
Viele Anwendungen müssen Konfigurationsdaten speichern, um ein bestimmtes Verhalten für die Codebasis festzulegen. In .NET-Anwendungen werden Vorzugseinstellungen und Konfigurationsdaten in der Datei web.config bei Webanwendungen und in der Datei app.config bei anderen Anwendungstypen gespeichert. Auch wenn sich die Namen unterscheiden, verwenden beide Dateien das gleiche XML-Schema. Das Schema ist in dem Sinne erweiterbar, dass man eigene benutzerdefinierte Abschnitte mit einem personalisierten Schema erstellen kann. Dieser Artikel hat gezeigt, wie Sie benutzerdefinierte Abschnitte erstellen und registrieren.
Dino Esposito ist R&D Director bei Crionet, einer Firma, die sich auf webbasierte und mobile Lösungen für Sportereignisse in ganz Europa spezialisiert hat (http://www.e-tennis.net). Außerdem ist Dino der Autor von „Programming ASP.NET 4“, Microsoft Press, 2011.