我已经在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文件时自动更改。因此问题是:如何使强类型配置更改而无需重新启动Web应用程序的情况下更改.json文件?