首頁 >後端開發 >C++ >如何在 .NET 中使用 ConfigurationElementCollection 正確實作 ConfigurationSection?

如何在 .NET 中使用 ConfigurationElementCollection 正確實作 ConfigurationSection?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 05:38:09815瀏覽

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

使用 ConfigurationElementCollection 實作 ConfigurationSection

自訂設定時,您可能會在實作設定部分時遇到問題。本文討論了 ConfigurationSection 與 ConfigurationElementCollection 的使用,澄清了誤解並提供了正確實現的指導。

上下文

您已使用 ServicesSection 在 App.config 檔案中定義了自訂設定部分和一個 ServiceCollection 元素。但是,儘管創建了元素類別(ServiceConfig 和 ServiceCollection),您還是在配置節處理程序中遇到了異常。

解決方案

配置節處理程序

您最初嘗試使用 IConfigurationSectionHandler接口,現已棄用。正確的方法是建立一個派生自 ConfigurationSection 的配置節類別。在您的情況下,您需要一個 ServiceConfigurationSection 類別。此類別應定義一個 Services 屬性,這是 ServiceConfig 元素的 ConfigurationCollection。

配置集合實作

在ServiceCollection 類別中,請務必擴充ConfigurationElementCollection 並重寫必要的方法來建立新元素( CreateNewElement),擷取元素鍵(GetElementKey),並執行新增、刪除和清除元素等操作。

最終程式碼

以下是必要的類別和設定的完整程式碼:

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;
}

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:

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

App.config設定:

消費範例:依照下列步驟,您可以成功實現帶有集合元素的自訂設定部分。

以上是如何在 .NET 中使用 ConfigurationElementCollection 正確實作 ConfigurationSection?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn