【发布时间】:2018-03-23 16:18:54
【问题描述】:
我正在开发 Asp.Net Core 应用程序
我想在运行应用程序后更改配置设置
我正在使用 IOptionsMonitor,但它没有检测到更改
在 Startup.cs -> 我有 Configuration() 方法
services.Configure<Config>(Configuration.GetSection("someConfig"));
在读取这些配置设置的不同类中,我写了类似
var someConfig= serviceProvider.GetRequiredService<IOptionsMonitor<Config>>();
但是当我更改配置文件(Json File)时,没有检测到更改,并且 someConfig 没有更改。
配置 POCO 类:
public class Config
{
public string name {get; set;}
//More getters and setters
}
编辑:
services.AddSingleton<ConfigHelpers>;
我正在使用一个单例对象,我试图在其中读取配置。如果它不是一个 snigleton,它就可以正常工作。有没有办法在单例对象中更改配置?
在 ConfigHelpers.cs 中
var someConfig= serviceProvider.GetRequiredService<IOptionsMonitor<Config>();
由于它在 Startup.cs 中被定义为单例,因此对 Config 所做的更改不会反映。
【问题讨论】:
-
您是否将设置文件的 reloadChanges 标志设置为“true”?
-
@SimplyGed 是的,我做到了。
-
@PHPMODE 你能把
IOptionsMonitor换成IOptionsSnapshot吗? -
@win 试过了,不行。我正在尝试打开配置 JSON 文件并手动更改它(保存 -> 关闭)。这就是它的工作原理吗?
-
您是否厌倦了将 AddSingleton 更改为 AddScoped?如果这有帮助,那么我会改变您在项目中使用 ConfigHelper 的方式。
标签: c# asp.net-core