Heim >Backend-Entwicklung >C++ >Wie implementiert man einen ConfigurationSection mit einer ConfigurationElementCollection in .NET korrekt?

Wie implementiert man einen ConfigurationSection mit einer ConfigurationElementCollection in .NET korrekt?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 05:38:09815Durchsuche

How to Correctly Implement a ConfigurationSection with a ConfigurationElementCollection in .NET?

Implementieren eines ConfigurationSection mit einer ConfigurationElementCollection

Beim Anpassen von Konfigurationen können beim Implementieren eines Konfigurationsabschnitts Probleme auftreten. Dieser Artikel befasst sich mit der Verwendung einer ConfigurationSection mit einer ConfigurationElementCollection, klärt Missverständnisse auf und bietet Anleitungen zur korrekten Implementierung.

Kontext

Sie haben in Ihrer App.config-Datei einen benutzerdefinierten Konfigurationsabschnitt mit einer ServicesSection definiert und ein ServiceCollection-Element. Trotz der Erstellung von Elementklassen (ServiceConfig und ServiceCollection) sind jedoch Ausnahmen beim Konfigurationsabschnittshandler aufgetreten.

Lösung

Konfigurationsabschnittshandler

Sie haben zunächst versucht, den IConfigurationSectionHandler zu verwenden Schnittstelle, die jetzt veraltet ist. Der richtige Ansatz besteht darin, eine Konfigurationsabschnittsklasse zu erstellen, die von ConfigurationSection abgeleitet ist. In Ihrem Fall benötigen Sie eine ServiceConfigurationSection-Klasse. Diese Klasse sollte eine Services-Eigenschaft definieren, die eine ConfigurationCollection von ServiceConfig-Elementen ist.

Configuration Collection-Implementierung

Achten Sie innerhalb Ihrer ServiceCollection-Klasse darauf, ConfigurationElementCollection zu erweitern und die erforderlichen Methoden zum Erstellen neuer Elemente zu überschreiben ( CreateNewElement), Elementschlüssel abrufen (GetElementKey) und Vorgänge wie das Hinzufügen, Entfernen und Löschen von Elementen ausführen.

Final Code

Hier ist der vollständige Code für die notwendigen Klassen und Konfigurationen:

ServiceConfig:

public class ServiceConfig : ConfigurationElement
{
    [ConfigurationProperty("Port", DefaultValue = 0, IsRequired = true, IsKey = true)]
    public int Port { get; set; }

    [ConfigurationProperty("ReportType", DefaultValue = "File", IsRequired = true, IsKey = false)]
    public string ReportType { get; set; }
}

ServiceCollection:

public class ServiceCollection : ConfigurationElementCollection
{
    public override ConfigurationElement CreateNewElement() => new ServiceConfig();
    protected override object GetElementKey(ConfigurationElement element) => ((ServiceConfig)element).Port;
}

ServiceConfigurationSection:

public class ServiceConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("Services", IsDefaultCollection = false)]
    [ConfigurationCollection(typeof(ServiceCollection),
        AddItemName = "add",
        ClearItemsName = "clear",
        RemoveItemName = "remove")]
    public ServiceCollection Services => (ServiceCollection)base["Services"];
}

App.config Konfiguration:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="ServicesSection" type="RT.Core.Config.ServiceConfigurationSection, RT.Core" />
    </configSections>
    <ServicesSection>
        <Services>
            <add Port="6996" ReportType="File" />
            <add Port="7001" ReportType="Other" />
        </Services>
    </ServicesSection>
</configuration>

Verbrauchsbeispiel:

ServiceConfigurationSection serviceConfigSection = ConfigurationManager.GetSection("ServicesSection") as ServiceConfigurationSection;
ServiceConfig serviceConfig = serviceConfigSection.Services[0];

Durch Befolgen dieser Schritte können Sie einen benutzerdefinierten Konfigurationsabschnitt mit einem Sammlungselement erfolgreich implementieren.

Das obige ist der detaillierte Inhalt vonWie implementiert man einen ConfigurationSection mit einer ConfigurationElementCollection in .NET korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn