• 使用ChangToken配置变更监听


    IChangeToken 接口

    IChangeToken 传播已发生更改的通知。 IChangeToken 驻留在 Microsoft.Extensions.Primitives 命名空间中。

    常用方法:IChangeToken 接口具有 RegisterChangeCallback(Action<Object>, Object) 方法,用于注册在令牌更改时调用的回调。 调用回调之前,必须设置 HasChanged

    我们可以给Configuration对象注册一个ChangeCallBack回调方法,当配置文件改变时我们输出改变后的新值。

    当前Json文件配置为:

    {
      "Key1": "1",
      "Key2": "a1",
      "Key3": "v1"
    }
    class Program
        {
            static void Main(string[] args)
            {
                var builder = new ConfigurationBuilder();
    
                builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
                var configurationRoot = builder.Build();
    
                IChangeToken changeToken = configurationRoot.GetReloadToken();
    
                changeToken.RegisterChangeCallback(state =>
                {
                    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
                    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
                    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");
                }, configurationRoot);
    
                Console.ReadKey();
            }
        }

    当我们修改Json文件时,回调函数将会被调用。

    但此回调仅仅会被执行一次,如果继续改变Json文件配置的值,回调函数也不会在触发了。所以我们如果想做到长时间的监控可以用ChangeToken类中的OnChange拓展方法。

    ChangeToken 类

    ChangeToken 是静态类,用于传播已发生更改的通知。 ChangeToken 驻留在 Microsoft.Extensions.Primitives 命名空间中。

    ChangeToken.OnChange(Func<IChangeToken>, Action) 方法注册令牌更改时要调用的 Action

    • Func<IChangeToken> 生成令牌。
    • 令牌更改时,调用 Action

    ChangeToken.OnChange<TState>(Func<IChangeToken>, Action<TState>, TState) 重载还具有一个 TState 参数,该参数传递给令牌使用者 Action

    OnChange 返回 IDisposable。 调用 Dispose 将使令牌停止侦听更多更改并释放令牌的资源。

    这里注意第一个入参是一个泛型委托

    ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () =>
    {
    //You Want To Do
    });
  • 相关阅读:
    python的logging库
    python的os库
    python的setup和teardown
    CF339D Xenia and Bit Operations线段树
    poj3311Hie with the Pie状压dp
    poj3254Corn Fields状压Dp
    CF414BMashmokh and ACMDP
    母函数6连杀
    母函数hdu1085
    UVA 1401Remember the WordDp
  • 原文地址:https://www.cnblogs.com/Xieyiincuit/p/13977405.html
Copyright © 2020-2023  润新知