2016-11-08 93 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