Heim >Backend-Entwicklung >C++ >Wie implementiert man einen ConfigurationSection mit einer ConfigurationElementCollection in .NET korrekt?
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.
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.
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.
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.
Hier ist der vollständige Code für die notwendigen Klassen und Konfigurationen:
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; }
public class ServiceConfigurationSection : ConfigurationSection { [ConfigurationProperty("Services", IsDefaultCollection = false)] [ConfigurationCollection(typeof(ServiceCollection), AddItemName = "add", ClearItemsName = "clear", RemoveItemName = "remove")] public ServiceCollection Services => (ServiceCollection)base["Services"]; }
<?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>
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!