【问题标题】:Json File - Changed Tracking and ReloadJson 文件 - 更改跟踪和重新加载
【发布时间】:2018-09-12 10:10:38
【问题描述】:

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

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    为了在配置对象上使用Bind method,您还需要Microsoft.Extensions.Configuration.Binder packageMicrosoft.Extensions.Configuration 仅附带用于配置的基本内容,Microsoft.Extensions.Configuration.Json 仅是 JSON 文件的加载器。

    要回答您的其他问题,关于如何通过reloadOnChange: true 获得有关 JSON 配置文件的配置更改的通知,您可以为此使用重新加载更改令牌。最简单的方法是使用 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

    【讨论】:

    • 有没有一种方法可以检查哪些属性和哪些文件已更改,而不是通用的“配置已更改”消息?
    • @DotNetDev 接口不提供这个,不。该配置也应该与源无关,因此配置值来自何处并不重要(并且您无法从外部判断它来自何处)。类似地,为每个配置路径提供一个差异会非常昂贵,但这并不能真正为您带来配置的好处:您应该按原样使用配置;更改应该只触发重新加载取决于配置的任何内容。 – 如果您需要更多控制,那么配置可能不是您问题的解决方案。
    • 感谢@poke 提到选项监视器,这正是我所需要的!
    猜你喜欢
    • 2014-06-18
    • 2021-04-09
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多