>백엔드 개발 >C++ >.NET에서 ConfigurationElementCollection을 사용하여 ConfigurationSection을 올바르게 구현하는 방법은 무엇입니까?

.NET에서 ConfigurationElementCollection을 사용하여 ConfigurationSection을 올바르게 구현하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 05:38:09849검색

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

ConfigurationElementCollection을 사용하여 ConfigurationSection 구현

구성을 사용자 정의할 때 구성 섹션을 구현하는 동안 문제가 발생할 수 있습니다. 이 문서에서는 ConfigurationElementCollection과 함께 ConfigurationSection을 사용하여 오해를 명확히 하고 올바른 구현에 대한 지침을 제공합니다.

Context

ServiceSection을 사용하여 App.config 파일에 사용자 정의 구성 섹션을 정의했습니다. 및 ServiceCollection 요소. 그러나 요소 클래스(ServiceConfig 및 ServiceCollection)를 생성했음에도 불구하고 구성 섹션 핸들러에서 예외가 발생했습니다.

솔루션

구성 섹션 핸들러

처음에 IConfigurationSectionHandler를 사용하려고 시도했습니다. 인터페이스는 이제 더 이상 사용되지 않습니다. 올바른 접근 방식은 ConfigurationSection에서 파생되는 구성 섹션 클래스를 만드는 것입니다. 귀하의 경우 ServiceConfigurationSection 클래스가 필요합니다. 이 클래스는 ServiceConfig 요소의 ConfigurationCollection인 서비스 속성을 정의해야 합니다.

구성 컬렉션 구현

ServiceCollection 클래스 내에서 ConfigurationElementCollection을 확장하고 필요한 메서드를 재정의하여 새 요소를 생성해야 합니다( CreateNewElement), 요소 키 검색(GetElementKey), 추가, 제거, 지우기 등의 작업 수행 elements.

최종 코드

다음은 필요한 클래스에 대한 전체 코드입니다. 구성:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.