自訂設定時,您可能會在實作設定部分時遇到問題。本文討論了 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; }ServiceCollection:
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];
App.config設定:
消費範例:依照下列步驟,您可以成功實現帶有集合元素的自訂設定部分。以上是如何在 .NET 中使用 ConfigurationElementCollection 正確實作 ConfigurationSection?的詳細內容。更多資訊請關注PHP中文網其他相關文章!