在两个项目(.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上,我创建了一个控制器,只是从配置中返回一个字符串值,这与启动时保持一致.
所以我的问题:
我正在使用ASP.NET Core 2.0,我在Main方法中有这样的配置代码:
public static void Main(string[] args)
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment ?? "Production"}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
}
Run Code Online (Sandbox Code Playgroud)
我将reloadOnChange设置为true,并在我的控制器中使用IOptionsSnapshot
public HomeController(ILogger<HomeController> logger, IOptionsSnapshot<AppSettings> options)
Run Code Online (Sandbox Code Playgroud)
但是当我修改我的值时appsettings.json,我必须每次都重新启动我的应用程序,或者只是通过刷新浏览器来获取更改.我究竟做错了什么?我试图用控制台和IIS Express运行应用程序; 我也尝试过IOptionsMonitor,同样的事情.顺便问一下,IOptionsMonitor和之间的区别是IOptionsSnapshot什么?