如何覆盖MVC Core

时间:2016-11-08 13:28:50

标签: c# asp.net-mvc dependency-injection asp.net-core

我有一个项目,我从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的每个类中更改接口。

这可能吗?

1 个答案:

答案 0 :(得分:1)

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

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

您必须自己提供阅读内容的方法,但所有合并都应该通过框架来完成。

您需要实施IConfigurationProvider并将其添加到IConfigurationBuilder。您可以找到关于如何执行此操作的非常简单的说明here