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

xqkwcwgp  于 2024-01-09  发布在  .NET
关注(0)|答案(3)|浏览(124)

我已经能够在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) ... */
}


(The配置文件看起来像这样:)

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


(And我有一个类似这样的C#类:)

public class AppSettings
{
    public string This { get; set; }
    public string Foo { get; set; }
    /* etc... */
}


当我通过依赖注入获得IOptions<AppSettings>时,当我更改config.jsonconfig.Dev.json文件时,它不会改变。我必须重新启动整个Web应用程序以更新config类。但是如果我使用未类型化的IConfiguration示例,当我更改json文件时,它会自动更改。
所以问题是:当我更改.json文件时,如何使强类型配置更改,而不必重新启动webapp?

o2g1uqev

o2g1uqev1#

在asp.net核心1.1它修复与IOptionsSnapshot

ijnw1ujt

ijnw1ujt2#

当调用Configuration.GetSection()时,它将在启动时传入该部分。
为了在运行时更新AppSettings选项,必须将AppSettings选项绑定到配置节。

services.Configure<AppSettings>(option => Configuration.GetSection("AppSettings").Bind(option));

字符串

62lalag4

62lalag43#

ASP.NET 5已经有一段时间了,但是目前IOptions<T>的文档很清楚,没有读取更改。
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-8.0#the-options-pattern
当使用BindGet<T>方法(而不仅仅是调用GetSection)时,也会读取更改

相关问题