Benutzerdefinierte Abschnitte in .NET-Konfigurationsdateien (Teil 3)
Kommentare

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(„“,

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 -Elemente nicht unter ihrem eigenen übergeordneten Knoten gruppiert, sondern als direkte untergeordnete Elemente des Abschnittselements eingefügt werden.

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 ) besitzt einen untergeordneten Abschnitt . Der untergeordnete Abschnitt verhält sich selbst wie eine Auflistung und nimmt Elemente wie und auf. Elemente in der untergeordneten Auflistung sind von einem bestimmten Typ (im Beispiel TagMapInfo). Schließlich verfügt der Typ TagMapInfo über Eigenschaften, die mit ConfigurationProperty-Attributen versehen sind, einem für jede Eigenschaft, die einem XML-Attribut zugeordnet wird.

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.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -