5

두 프로젝트 (.NET Core Web API 및 .NET Core WindowsService)에서 구성에 appsettings.json을 사용하고 있습니다. 모두 Microsoft.Extensions.Configuration의 reloadOnChange가 appsettings.json에서 작동하는 방식

var configuration = new ConfigurationBuilder() 
      .SetBasePath(System.IO.Directory.GetCurrentDirectory()) 
      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
      .AddEnvironmentVariables() 
      .Build(); 

는 I는 reloadOnChange true로 설정하고 의존성 주입 IOptions 통해 주입로 사용있다. 웹 API 내에서 컨트롤러 클래스로, 서비스 내에서 설정을 사용하는 클래스로 이동합니다.

불행히도 나는 appsettings.json이 변경 될 때 값이 변경되지 않는 것을 경험합니다.

웹 API에서 설정에서 문자열 값을 반환하는 컨트롤러를 만들었으며 시작시와 동일하게 유지됩니다.

그래서 내 질문 : 그 (적어도 웹 API에서) 상자 밖으로 작업을해야하는 경우

  1. 누구나 알고?
  2. 내가해야하는 모든 작업이 효과가 있습니까?
+0

옵션 등록 방법은 무엇입니까? 'services.Configure (Confiugration.GetSection (...))'을 사용합니까? 또는 .Bind()를 사용합니까? – Tseng

+0

두 경우 모두 services.Configure (Confiugration.GetSection (. ..)) – monty

+0

일반적으로 위의 오버로드를 호출 할 때 변경 토큰을 통해 작동합니다 (https://github.com/aspnet/Options /blob/rel/1.1.0/src/Microsoft.Extensions.Options.ConfigurationExtensions/OptionsConfigurationServiceCollectionExtensions.cs#L35-L36) 및 https://github.com/aspnet/Options/blob/rel/1.1.0/src/ 토큰이 실행될 때 Microsoft.Extensions.Options.ConfigurationExtensions/ConfigureFromConfigurationOptions.cs가 다시 바인딩을 트리거합니다. – Tseng

답변

3

(reloadOnChange는 ASP.NET 코어 1.1 이상 지원하기 때문에) 당신이 아니라 단지 IOptions보다 실제로 당신이 원하는 IOptionsSnapshot (참조 Configuration in ASP.NET Core - IOptionsSnapshot) 닷넷 코어 1.1을 사용하는 가정.

+0

지금까지 작동하지 않았지만 계속 시도 할 것입니다. – monty

+0

이것은 나를 위해 일했습니다! 나는 생성자를 통해'IOptions '를 주입하고있다. IOptionsSnapshot 로 변경하면 앱을 다시 시작하지 않고도 파일 변경시 업데이트됩니다. – Scott

관련 문제