수색…
소개
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();
여기서 Configuration
은 IConfigurationRoot
의 인스턴스이며,이 인스턴스를 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
파일의 생성자를 만듭니다.
- 먼저 새로운
ConfigurationBuilder
만듭니다. - 그런 다음 추가 파일의 절대 경로를 계산하는 데 사용될 기본 경로를 설정합니다
- 선택적인
appsettings.json
을 구성 빌더에 추가하고 변경 사항을 모니터링합니다. -
appsettings.environementName.json
구성 파일과 관련된 선택적 환경을 추가합니다. - 그런 다음 환경 변수를 추가합니다.
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과 함께 제공되는 옵션 모델은 section
을 StorageOptions
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"
})
이것은 통합 / 단위 테스트 시나리오에서 도움이 될 수 있습니다.