如何覆盖配置在MVC核心
本文关键字:配置 MVC 核心 覆盖 何覆盖 | 更新日期: 2023-09-27 18:16:53
我有一个项目,我在启动类中从json文件中读取配置:
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的每个类中更改接口。
我认为最正确的方法是提供自定义ConfigurationExtension
。例如
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddDatabaseValues();
你必须自己提供方法来阅读,但是所有的合并应该由框架完成。
需要实现IConfigurationProvider
,添加到IConfigurationBuilder
中。你可以在这里找到如何做到这一点的一个非常简单的解释。