自定义配置时,您可能会在实现配置部分时遇到问题。本文讨论了 ConfigurationSection 与 ConfigurationElementCollection 的使用,澄清了误解并提供了正确实现的指导。
您已使用 ServicesSection 在 App.config 文件中定义了自定义配置部分和一个 ServiceCollection 元素。但是,尽管创建了元素类(ServiceConfig 和 ServiceCollection),您还是在配置节处理程序中遇到了异常。
您最初尝试使用 IConfigurationSectionHandler接口,现已弃用。正确的方法是创建一个派生自 ConfigurationSection 的配置节类。在您的情况下,您需要一个 ServiceConfigurationSection 类。此类应定义一个 Services 属性,该属性是 ServiceConfig 元素的 ConfigurationCollection。
在 ServiceCollection 类中,请务必扩展 ConfigurationElementCollection 并重写必要的方法来创建新元素 ( CreateNewElement),检索元素键(GetElementKey),并执行添加、删除和清除元素等操作。
以下是必要的类和配置的完整代码:
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];
按照以下步骤,您可以成功实现带有集合元素的自定义配置部分。
以上是如何在 .NET 中使用 ConfigurationElementCollection 正确实现 ConfigurationSection?的详细内容。更多信息请关注PHP中文网其他相关文章!