我有一个.NET Core 2.0控制台应用程序,该应用程序具有一个AppConfiguration文件,该文件提供了不同的应用程序设置。我已经在主方法中添加了一个ConfigurationBuilder
对象的创建,并为该JSON文件添加了reloadOnChange
标志,如下面的代码所示。
static void Main(string[] args)
{
Console.WriteLine("Program started...");
Console.WriteLine("Stop Program by Ctrl+C");
//Add Exit Possibility
Console.CancelKeyPress += CurrentDomain_ProcessExit;
//Add Configuration Builder
Console.Write("Load Shared Configuration...");
Configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("SharedAppConfiguration.json", optional: false, reloadOnChange: true)
.Build();
Console.WriteLine("done");
}
我如何捕获或获取有关JSON文件“ SharedAppConfiguration.json”已更改的事件的信息?
我试图做这样的事情:
Configuration.GetSection("AppConfiguration").Bind(appConfiguration);
但是看上去,.NET Core控制台应用程序中没有.Bind
方法-在ASP.NET中可用。
答案 0 :(得分:1)
为了在配置对象上使用Bind
method,您还需要Microsoft.Extensions.Configuration.Binder
package。 Microsoft.Extensions.Configuration
仅带有用于配置的基本内容,而Microsoft.Extensions.Configuration.Json
仅是JSON文件的加载器。
要回答另一个问题,关于如何使用reloadOnChange: true
来通知JSON配置文件的配置更改,您可以为此使用reload change令牌。为此,最容易使用ChangeToken.OnChange
辅助功能:
var configuration = new ConfigurationBuilder()
.AddJsonFile("file.json", optional: false, reloadOnChange: true)
.Build();
// register change callback
ChangeToken.OnChange(() => configuration.GetReloadToken(), () => {
Console.WriteLine("Configuration changed");
});
如果您使用的是options pattern,则也可以使用options monitor。