如何覆盖配置在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的每个类中更改接口。

如何覆盖配置在MVC核心

我认为最正确的方法是提供自定义ConfigurationExtension。例如

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

你必须自己提供方法来阅读,但是所有的合并应该由框架完成。

需要实现IConfigurationProvider,添加到IConfigurationBuilder中。你可以在这里找到如何做到这一点的一个非常简单的解释。