수색…


소개

Asp.net 코어는 구성 추상화를 제공합니다. 이 도구를 사용하여 다양한 소스의 구성 설정을로드하고 응용 프로그램에서 사용할 수있는 최종 구성 모델을 작성할 수 있습니다.

통사론

  • IConfiguration
  • string this[string key] { get; set; }
  • IEnumerable<IConfigurationSection> GetChildren();
  • IConfigurationSection GetSection(string key);

종속성 삽입을 사용한 구성 액세스

권장되는 방법은 그렇게하지 않고 IOptions<TOptions>IServiceCollection.Configure<TOptions> 입니다.

즉, IConfigurationRoot 응용 프로그램에서 사용할 수있게 만드는 것은 여전히 ​​간단합니다.

Startup.cs 생성자에서 구성을 작성하려면 다음 코드가 있어야합니다.

 Configuration = builder.Build();

여기서 ConfigurationIConfigurationRoot 의 인스턴스이며,이 인스턴스를 ConfigureServices 메서드, Startup.cs의 서비스 컬렉션에 Singleton으로 추가합니다.

 public void ConfigureServices(IServiceCollection services)
 {
    services.AddSingleton<IConfigurationRoot>(provider => Configuration);

예를 들어, 이제 컨트롤러 / 서비스의 구성에 액세스 할 수 있습니다

  public MyController(IConfigurationRoot config){
      var setting1= config.GetValue<string>("Setting1")
  }

시작하기

이 예에서는 새로운 프로젝트를 비계 할 때 어떤 일이 일어나는지 설명합니다.

우선, 다음 종속성이 프로젝트에 추가됩니다 (현재 project.json 파일).

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",

또한 ConfigurationBuilder 유창 API를 사용하여 ConfigurationBuilder 작성하는 Startup.cs 파일의 생성자를 만듭니다.

  1. 먼저 새로운 ConfigurationBuilder 만듭니다.
  2. 그런 다음 추가 파일의 절대 경로를 계산하는 데 사용될 기본 경로를 설정합니다
  3. 선택적인 appsettings.json 을 구성 빌더에 추가하고 변경 사항을 모니터링합니다.
  4. appsettings.environementName.json 구성 파일과 관련된 선택적 환경을 추가합니다.
  5. 그런 다음 환경 변수를 추가합니다.
public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

동일한 설정이 여러 소스에 설정되어있는 경우 최신 소스가 추가되고 해당 값이 선택됩니다.

그런 다음 indexer 속성을 사용하여 구성을 사용할 수 있습니다. 콜론 : 문자는 경로 구분 기호를 제공합니다.

Configuration["AzureLogger:ConnectionString"]

AzureLogger 섹션에서 ConnectionString 구성 값을 찾습니다.

환경 변수에 대한 작업

당신은 호출하여 환경 변수에서 구성을 소싱 할 수 .AddEnvironmentVariables() 당신에 ConfigurationBuilder .

이 접두어 환경 변수로드 APPSETTING_ 그런 다음 결장 사용 : 키 경로로 분리한다.

이것은 다음을 의미합니다 : 다음 환경 설정 :

APPSETTING_Security:Authentication:UserName = a_user_name
APPSETTING_Security:Authentication:Password = a_user_password

이 json과 동등한 것입니다 :

{
    "Security" : {
       "Authentication" : {
           "UserName" : "a_user_name",
           "Password" : "a_user_password" 
        } 
    }
}

** Azure Service는 설정을 환경 변수로 전송합니다. 접두사가 투명하게 설정됩니다. 그래서 Azure에서 동일한 작업을 수행하려면 AppSettings 블레이드에 두 개의 응용 프로그램 설정을 설정하십시오.

Security:Authentication:UserName         a_user_name
Security:Authentication:Password         a_user_password

옵션 모델 및 구성

대형 구성 세트를 다룰 때, 하나의 구매 하나를로드하는 것은 꽤 어려울 수 있습니다.

asp.net과 함께 제공되는 옵션 모델은 sectionStorageOptions poco 에 매핑하는 편리한 방법을 제공합니다. 예를 들어, Microsoft.Extensions.Options.ConfigurationExtensions 패키지를 추가하고 Configure<TOptions>(IConfiguration config) 호출하면 Configure<TOptions>(IConfiguration config) 섹션에서 StorageOptions 직접 수화 할 수 있습니다. Configure<TOptions>(IConfiguration config) 확장 방법.

services.Configure<StorageOptions>(Configuration.GetSection("Storage"));

메모리 구성 소스에서

Dictionary<string,string> 과 같은 메모리 개체에서 구성을 가져올 수도 있습니다.

.AddInMemoryCollection(new Dictionary<string, string>
{
    ["akey"] = "a value"
})

이것은 통합 / 단위 테스트 시나리오에서 도움이 될 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow