Json文件-更改了跟踪和重新加载

时间:2018-09-12 10:10:38

标签: c# .net-core

我有一个.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中可用。

1 个答案:

答案 0 :(得分:1)

为了在配置对象上使用Bind method,您还需要Microsoft.Extensions.Configuration.Binder packageMicrosoft.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