구성을 사용자 정의할 때 구성 섹션을 구현하는 동안 문제가 발생할 수 있습니다. 이 문서에서는 ConfigurationElementCollection과 함께 ConfigurationSection을 사용하여 오해를 명확히 하고 올바른 구현에 대한 지침을 제공합니다.
ServiceSection을 사용하여 App.config 파일에 사용자 정의 구성 섹션을 정의했습니다. 및 ServiceCollection 요소. 그러나 요소 클래스(ServiceConfig 및 ServiceCollection)를 생성했음에도 불구하고 구성 섹션 핸들러에서 예외가 발생했습니다.
처음에 IConfigurationSectionHandler를 사용하려고 시도했습니다. 인터페이스는 이제 더 이상 사용되지 않습니다. 올바른 접근 방식은 ConfigurationSection에서 파생되는 구성 섹션 클래스를 만드는 것입니다. 귀하의 경우 ServiceConfigurationSection 클래스가 필요합니다. 이 클래스는 ServiceConfig 요소의 ConfigurationCollection인 서비스 속성을 정의해야 합니다.
ServiceCollection 클래스 내에서 ConfigurationElementCollection을 확장하고 필요한 메서드를 재정의하여 새 요소를 생성해야 합니다( CreateNewElement), 요소 키 검색(GetElementKey), 추가, 제거, 지우기 등의 작업 수행 elements.
다음은 필요한 클래스에 대한 전체 코드입니다. 구성:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!