2016-11-08 2 views
0

내가 시작 클래스에서 JSON 파일에서 구성을 읽을 프로젝트가에 구성을 덮어 쓰기하는 방법 : I 데이터베이스에서 새 값이 덮어 싶습니다MVC 코어

services.Configure<ApplicationConfiguration>(
    Configuration.GetSection("ApplicationConfiguration")); 

합니다.

public MyClass(IOptions<ApplicationConfiguration> applicationConfiguration,) 
{ 
    applicationConfiguration = new DbApplicationConfiguration(); 
} 

DbApplicationConfiguration 클래스 :이 작동하고

public class DbApplicationConfiguration : IOptions<ApplicationConfiguration> 
{ 
    public ApplicationConfiguration Value 
    { 
     get 
     { 
      var configuration = new ApplicationConfiguration(); 
      configuration.Host = "myHost"; 
      // ... 
      return configuration; 
     } 
    } 
} 

,하지만 MyClass에있다. 컨테이너의 구성을 덮어 쓰려고합니다. 그래야 내가 IOptions<ApplicationConfiguration>을 삽입 할 때마다 새로운 덮어 쓰기 값이 생깁니다.

구성 페이지에서 구성을 업데이트 할 필요가 있습니다. IOption이 삽입 된 모든 클래스에서 인터페이스를 변경하지 않는 것이 좋습니다.

이것이 가능합니까?

+0

DB에서 데이터를 읽고 반환하는 사용자 지정 'ConfigurationProvider'를 작성하십시오. 또는'Startup.cs'에서 명시 적으로 값을 무시하십시오. https://docs.asp.net/en/latest/fundamentals/configuration.html#example-entity-framework-settings를 참조하십시오. – haim770

답변

1

당신이 할 수있는 가장 올바른 방법은 사용자 정의 ConfigurationExtension을 제공하는 것입니다. 예 :

var builder = new ConfigurationBuilder() 
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
       .AddEnvironmentVariables() 
       .AddDatabaseValues(); 

당신은 물건을 읽는 동안 직접 방법을 제공해야하지만, 모든 병합은 프레임 워크에 의해 수행되어야합니다.

IConfigurationProvider을 구현하고 IConfigurationBuilder에 추가해야합니다. 이를 수행하는 방법에 대한 아주 간단한 설명을 찾을 수 있습니다 here.

관련 문제