ASP.NET 5:如何在更改时重新加载强类型配置

7

我已经在ASP.NET 5中成功设置了强类型配置,而且它也很完美地工作。我还将配置设置为在更改.json配置文件时自动重新加载。但是只有在使用未类型化的配置时才有效。当.json文件发生更改时,强类型配置类仍保留旧值。

我是这样设置配置的:

public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
    // Setup configuration sources
    var builder = new ConfigurationBuilder()
        .AddJsonFile("config.json")
        .AddJsonFile($"config.{env.EnvironmentName}.json");
    Configuration = builder.Build()
        .ReloadOnChanged("config.json")
        .ReloadOnChanged($"config.{env.EnvironmentName}.json");
    /* ... (unrelated stuff edited away) ... */
}

并且像这样绑定它:

public void ConfigureServices(IServiceCollection services)
{
    /* ... (unrelated stuff edited away) ... */
    services.AddOptions();
    services.AddInstance(Configuration);
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    services.Configure<DbSettings>(Configuration.GetSection("DbSettings"));
    /* ... (unrelated stuff edited away) ... */
}

配置文件看起来像这样:

{
    "AppSettings": {
        "This": "that",
        "Foo": "bar"
        /* etc... */
    },
    "DbSettings": {
        /* (db settings here) */
    }
}

(我相应地有一个C#类,如下所示:)
public class AppSettings
{
    public string This { get; set; }
    public string Foo { get; set; }
    /* etc... */
}

当我通过依赖注入获取IOptions<AppSettings>时,即使我更改了config.jsonconfig.Dev.json文件,它也不会发生变化。 我必须重新启动整个Web应用程序才能更新配置类。 但如果我使用未类型化的IConfiguration实例,则在更改json文件时自动更改。
因此问题是:如何使强类型配置更改而无需重新启动Web应用程序的情况下更改.json文件?

你曾经成功克服过这个限制吗?是否有可能强制services.configure在文件更改时加载? - João Pereira
2个回答

2

0
当调用Configuration.GetSection()时,它将在启动时传递该部分一次。
为了使AppSettings选项在运行时更新,必须将AppSettings选项绑定到配置部分。
services.Configure<AppSettings>(option => Configuration.GetSection("AppSettings").Bind(option));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接