構成をカスタマイズする場合、構成セクションの実装中に問題が発生する可能性があります。この記事では、ConfigurationElementCollection での ConfigurationSection の使用について説明し、誤解を明確にし、正しい実装に関するガイダンスを提供します。
ServicesSection を使用して App.config ファイルにカスタム構成セクションを定義しました。 ServiceCollection 要素。ただし、要素クラス (ServiceConfig および ServiceCollection) を作成したにもかかわらず、構成セクション ハンドラーで例外が発生しました。
最初に IConfigurationSectionHandler を使用しようとしました。インターフェースは現在非推奨になっています。正しいアプローチは、ConfigurationSection から派生した構成セクション クラスを作成することです。あなたの場合、ServiceConfigurationSection クラスが必要です。このクラスは、ServiceConfig 要素の ConfigurationCollection である Services プロパティを定義する必要があります。
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 中国語 Web サイトの他の関連記事を参照してください。