Maison >développement back-end >C++ >Comment implémenter correctement une ConfigurationSection avec une ConfigurationElementCollection dans .NET ?
Lors de la personnalisation des configurations, vous pouvez rencontrer des problèmes lors de l'implémentation d'une section de configuration. Cet article traite de l'utilisation d'une ConfigurationSection avec une ConfigurationElementCollection, clarifiant les idées fausses et fournissant des conseils sur la mise en œuvre correcte.
Vous avez défini une section de configuration personnalisée dans votre fichier App.config avec une ServicesSection. et un élément ServiceCollection. Cependant, malgré la création de classes d'éléments (ServiceConfig et ServiceCollection), vous avez rencontré des exceptions avec le gestionnaire de section de configuration.
Vous avez initialement tenté d'utiliser IConfigurationSectionHandler interface, qui est désormais obsolète. L’approche correcte consiste à créer une classe de section de configuration dérivée de ConfigurationSection. Dans votre cas, vous avez besoin d'une classe ServiceConfigurationSection. Cette classe doit définir une propriété Services qui est une ConfigurationCollection d'éléments ServiceConfig.
Dans votre classe ServiceCollection, assurez-vous d'étendre ConfigurationElementCollection et de remplacer les méthodes nécessaires pour créer de nouveaux éléments ( CreateNewElement), récupérer les clés d'élément (GetElementKey) et effectuer des opérations telles que l'ajout, la suppression et l'effacement éléments.
Voici le code complet pour les classes et la configuration nécessaires :
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];
En suivant ces étapes, vous pouvez implémenter avec succès une section de configuration personnalisée avec un élément de collection.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!