[ASP.NET Core 3 프레임워크 폭로] Options[7]: 구성 시스템과 통합

5167 단어
Options 모델 자체는 구성 시스템과 전혀 관련이 없지만 구성은 대부분의 경우 Options 대상을 연결하는 데이터 원본이 되기 때문에 이를 결합시킬 필요가 있다.에서 보여준 두 가지 예와 같이 설정 시스템에 대한 통합은 맞춤형 Options 모델에 해당하는 대상을 통해 이루어진다.구체적으로 통합 구성 시스템은 다음과 같은 두 가지 문제를 해결해야 합니다.
4
  • 구성 데이터를 호스팅하는 IConfiguration 객체를 Options 객체로 바인딩합니다

  • 4
  • 구성 데이터의 변화를 자동으로 감지합니다

  • 첫 번째 문제는 Options 대상에 대한 초기화 문제와 관련된다. 이것은 자연히 사용자 정의 IConfigure Options 실현 유형을 통해 해결된 것이다. 구체적으로 말하면 아래의 NamedConfigure FromConfiguration Options 유형이다. 이것은NuGet 패키지'Microsoft.Extensions.options.ConfigurationExtensions'에 정의된다.아래 코드 세션에서 보듯이 NamedConfigureFromConfigurationOptions는ConfigurationBinder의 정적 방법인 Bind를 호출하여 설정 귀속 메커니즘을 이용하여 설정 데이터가 Options 대상으로의 전환을 실현한다.
    public class NamedConfigureFromConfigurationOptions : ConfigureNamedOptions where TOptions : class
    {
        public NamedConfigureFromConfigurationOptions(string name, IConfiguration config)
            : base(name, options => ConfigurationBinder.Bind(config, options))
        {}
    }

    두 번째 문제는 사용자 정의의 IOptions ChangeToken Source 실현 유형을 이용하여 해결한다. 구체적으로 제공된 것은 아래의Configuration ChangeToken Source이다.제시된 코드 세션에서 알 수 있듯이 GetChangeToken 방법은 IConfiguration 대상의 GetReloadToken 방법을 직접 호출하여 되돌아오는 IChangeToken 대상이다.
    public class ConfigurationChangeTokenSource : IOptionsChangeTokenSource
    {
        private IConfiguration _config;
        public string Name { get; }
    
        public ConfigurationChangeTokenSource(IConfiguration config) : this(Options.DefaultName, config)
        { }
        public ConfigurationChangeTokenSource(string name, IConfiguration config)
        {
            _config = config;
            Name = name ?? Options.DefaultName;
        }
    
        public IChangeToken GetChangeToken() => _config.GetReloadToken()
    }

    IConfiguration 대상을 Options 대상으로 묶은 Named Configure From Configuration Options와 설정 데이터의 변화를 측정하는 Configuration Change Token Source는 아래의 Configure 확장 방법을 통해 등록되었다.
    public static class OptionsConfigurationServiceCollectionExtensions
    {    
        public static IServiceCollection Configure( this IServiceCollection services, IConfiguration config) where TOptions : class
            => services.Configure(Options.Options.DefaultName, config);
        
        public static IServiceCollection Configure( this IServiceCollection services, string name, IConfiguration config)  where TOptions : class
            => services
             .AddSingleton>( new ConfigurationChangeTokenSource(name, config))
             .AddSingleton>( new NamedConfigureFromConfigurationOptions(name, config));
    }

    [ASP.NET Core 3 프레임워크 폭로] Options[1]: 설정 옵션의 정확한 사용 방식 [전편] [ASP.NET Core 3 프레임워크 폭로] Options[2]: 설정 옵션의 정확한 사용 방식 [하편] [ASP.NET Core 3 프레임워크 폭로] Options[3]: Options 모델 [전편] [ASP.NET Core 3 프레임워크 폭로] Options[4]: Options 모델 [하편] [ASP.NET Core 3 프레임워크 폭로] Options 주입[ASP.NET Core 3 프레임워크 폭로] Options[6]: 확장 및 맞춤형 [ASP.NET Core 3 프레임워크 폭로] Options[7]: 설정 시스템과 통합

    좋은 웹페이지 즐겨찾기