12 | 配置变更监听:配置热更新能力的核心
场景
- 需要记录配置源的变更时
- 需要在配置数据变更时触发特定操作时
当我们需要追踪我们的配置发生变化时,在配置发生变化时我们需要执行一些特定的操作的时候,这个时候就需要我们来进行一定的编码,来跟踪我们配置的变化
关键方法
IChangeToken IConfiguration.GetReloadToken()
示例
使用上一篇笔记创建的控制台应用程序,将代码修改为:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Primitives;
using System;
namespace ConfigurationFileDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
var root = builder.AddJsonFile("appsettings.json", true, true).Build();
IChangeToken token = root.GetReloadToken();
token.RegisterChangeCallback(state =>
{
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
Console.WriteLine($"Key3 : {root["key3"]}");
}, root);
Console.ReadKey();
}
}
}
IChangeToken token = root.GetReloadToken();
这行代码获取一个IChangeToken
对象,接口定义
using System;
namespace Microsoft.Extensions.Primitives
{
public interface IChangeToken
{
bool HasChanged { get; }
bool ActiveChangeCallbacks { get; }
IDisposable RegisterChangeCallback(Action<object> callback, object state);
}
}
RegisterChangeCallback(Action<object> callback, object state)
方法是用来注册我们的CallBack.
接下来执行我们的代码,运行起来之后去修改Json文件
将"Key1": "Value1",
修改为"Key1": "NewValue1"
保存,会发现控制台窗口进行了输出,而输出正式我们修改之后的值
然后我们再次修改,发现没有反应,这是因为这个方法只会生效一次,而想要再次注册,只能在方法内部再获取一次新的token执行方法,这样就会造成套娃,对于这种情况下,巨硬当前会给我们提供一个便捷的方式。
在ChangeToken
类上有一个静态方法OnChange
,这个方法可以帮助我们很轻松的来去处理这件事情,代码如下
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Primitives;
using System;
namespace ConfigurationFileDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
var root = builder.AddJsonFile("appsettings.json", true, true).Build();
ChangeToken.OnChange(() => root.GetReloadToken(), () =>
{
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
Console.WriteLine($"Key3 : {root["key3"]}");
Console.WriteLine("执行了!");
});
Console.WriteLine("开始了!");
Console.ReadKey();
}
}
}
使用OnChange
第一个重载方法,第一个入参是Func
获取IChangeToken
的途径,传入root.GetReloadToken()
,第二个是Action
传入要执行的方法。
运行我们的代码,然后去修改Json文件,每次修改都会执行Action
本文作者:hiwwwk
本文链接:https://www.cnblogs.com/wwwk/p/15873370.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步