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

我已经能够在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.json和config.Dev.json文件时它不会改变.我必须重新启动整个Web应用程序才能更新配置类.但是,如果我使用无类型的IConfiguration实例,它会在我更改json文件时自动更改.

所以问题是:当我更改.json文件时如何更改强类型配置,而不必重新启动webapp?

最佳答案 在asp.net核心1.1上,它固定在
IOptionsSnapshot

点赞