2016-11-08 120 views
0

我有項目,我在啓動類讀取JSON文件配置配置:如何覆蓋在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

要麼寫一個自定義的'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