我有一个项目,我从StartUp类中读取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的每个类中更改接口。
这可能吗?
答案 0 :(得分:1)
我认为最合适的方法是提供自定义ConfigurationExtension
。例如。
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddDatabaseValues();
您必须自己提供阅读内容的方法,但所有合并都应该通过框架来完成。
您需要实施IConfigurationProvider
并将其添加到IConfigurationBuilder
。您可以找到关于如何执行此操作的非常简单的说明here。