ホームページ >バックエンド開発 >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 の実装

構成をカスタマイズする場合、構成セクションの実装中に問題が発生する可能性があります。この記事では、ConfigurationElementCollection での ConfigurationSection の使用について説明し、誤解を明確にし、正しい実装に関するガイダンスを提供します。

Context

ServicesSection を使用して App.config ファイルにカスタム構成セクションを定義しました。 ServiceCollection 要素。ただし、要素クラス (ServiceConfig および ServiceCollection) を作成したにもかかわらず、構成セクション ハンドラーで例外が発生しました。

ソリューション

構成セクション ハンドラー

最初に IConfigurationSectionHandler を使用しようとしました。インターフェースは現在非推奨になっています。正しいアプローチは、ConfigurationSection から派生した構成セクション クラスを作成することです。あなたの場合、ServiceConfigurationSection クラスが必要です。このクラスは、ServiceConfig 要素の ConfigurationCollection である Services プロパティを定義する必要があります。

Configuration Collection Implementation

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

ServiceConfigurationSection:

public class ServiceConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("Services", IsDefaultCollection = false)]
    [ConfigurationCollection(typeof(ServiceCollection),
        AddItemName = "add",
        ClearItemsName = "clear",
        RemoveItemName = "remove")]
    public ServiceCollection Services => (ServiceCollection)base["Services"];
}

App.config 構成:

<?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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。