Microsoft.Extensions.Configuration的reloadOnChange如何为appsettings.json工作

mon*_*nty 15 json appsettings .net-core asp.net-core asp.net-core-webapi

在两个项目(.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();
Run Code Online (Sandbox Code Playgroud)

在两者中,我将reloadOnChange设置为true并使用它作为IOptions依赖注入注入.在web api中进入控制器类,在服务内进入使用设置的类.

不幸的是,我发现appsettings.json更改时值不会改变.

在web api上,我创建了一个控制器,只是从配置中返回一个字符串值,这与启动时保持一致.

所以我的问题:

  1. 任何人都知道这是否应该开箱即用(至少在网络API中)?
  2. 有什么我必须做的吗?

Bog*_*gin 9

假设您正在使用.net-core 1.1(因为reloadOnChange仅在ASP.NET Core 1.1及更高版本中支持),实际上IOptionsSnapshot您需要(参见 ASP.NET Core中的配置 - IOptionsSnapshot)而不仅仅是IOptions.

  • 这对我有用!我通过构造函数注入 `IOptions<MyAppSettings>`。将其更改为“IOptionsSnapshot<MyAppSettings>”可使其在文件更改时更新,而无需重新启动应用程序。 (3认同)