【问题标题】:ASP.NET 5: How to reload strongly typed configuration on changeASP.NET 5:如何在更改时重新加载强类型配置
【发布时间】:2016-07-07 19:21:13
【问题描述】:

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

那么问题来了:如何在我更改.json文件时更改强类型配置,而无需重新启动webapp?

【问题讨论】:

  • 你有没有设法克服这个限制?是否可以强制 services.configure 加载文件更改?

标签: c# asp.net json configuration configuration-files


【解决方案1】:

Configuration.GetSection() 被调用时,它会在启动时通过该部分。

为了在运行时更新AppSettings 选项,您必须将AppSettings 选项绑定到配置部分。

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

【讨论】:

    【解决方案2】:

    在 asp.net core 1.1 上它使用IOptionsSnapshot 修复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多