Microsoft.Extensions.Configuration 的 reloadOnChange 如何为 appsettings.json 工作
Posted
技术标签:
【中文标题】Microsoft.Extensions.Configuration 的 reloadOnChange 如何为 appsettings.json 工作【英文标题】:How does reloadOnChange of Microsoft.Extensions.Configuration work for appsettings.json 【发布时间】:2017-09-06 13:16:44 【问题描述】:在两个项目(一个 .NET Core Web API 和一个 .NET Core WindowsService)中,我使用 appsettings.json 进行配置。
var configuration = new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
在两者中,我都将 reloadOnChange 设置为 true,并通过依赖注入将其用作注入 IOptions
。在 web api 中进入控制器类,在服务中进入使用设置的类。
不幸的是,当 appsettings.json 更改时,我发现这些值不会更改。
在 web api 上,我创建了一个控制器来从配置中返回一个字符串值,这与启动时保持相同。
所以我的问题:
-
任何人都知道这是否应该开箱即用(至少在 web api 中)?
我必须做些什么才能让它起作用?
【问题讨论】:
您如何注册您的选项?你用services.Configure<MyAppSettings>(Confiugration.GetSection(...))
吗?还是你使用.Bind()
?
在这两种情况下 services.Configure假设您使用的是 .net-core 1.1(因为 reloadOnChange
仅在 ASP.NET Core 1.1 及更高版本中受支持)它实际上是您想要的 IOptionsSnapshot
(cf.
Configuration in ASP.NET Core - IOptionsSnapshot) 而不仅仅是IOptions
。
【讨论】:
目前还没有成功,但我会继续努力 这对我有用!我正在通过构造函数注入IOptions<MyAppSettings>
。将其更改为 IOptionsSnapshot<MyAppSettings>
使其在文件更改时更新,而无需重新启动应用程序。以上是关于Microsoft.Extensions.Configuration 的 reloadOnChange 如何为 appsettings.json 工作的主要内容,如果未能解决你的问题,请参考以下文章