我已经能够在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.json
和config.Dev.json
文件时,它不会改变。我必须重新启动整个Web应用程序以更新config类。但是如果我使用未类型化的IConfiguration
示例,当我更改json文件时,它会自动更改。
所以问题是:当我更改.json文件时,如何使强类型配置更改,而不必重新启动webapp?
3条答案
按热度按时间o2g1uqev1#
在asp.net核心1.1它修复与IOptionsSnapshot
ijnw1ujt2#
当调用
Configuration.GetSection()
时,它将在启动时传入该部分。为了在运行时更新
AppSettings
选项,必须将AppSettings
选项绑定到配置节。字符串
62lalag43#
ASP.NET 5已经有一段时间了,但是目前
IOptions<T>
的文档很清楚,没有读取更改。https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-8.0#the-options-pattern
当使用
Bind
或Get<T>
方法(而不仅仅是调用GetSection
)时,也会读取更改