前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET Core开发实战(第12课:配置变更监听)--学习笔记

.NET Core开发实战(第12课:配置变更监听)--学习笔记

作者头像
郑子铭
发布2021-01-13 15:23:40
4290
发布2021-01-13 15:23:40
举报

12 | 配置变更监听:配置热更新能力的核心

这一节讲解如何使用代码来监视配置变化并做出一些动作

当我们需要追踪配置发生的变化,可以在变化发生时执行一些特定的操作

配置主要提供了一个 GetReloadToken 方法,这就是跟踪配置的关键方法

接着使用上一节的代码

代码语言:javascript
复制
var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json", optional:true, reloadOnChange:true);
var configurationRoot = builder.Build();

IChangeToken token = configurationRoot.GetReloadToken();

IChangeToken 有两个属性和一个方法

代码语言:javascript
复制
public interface IChangeToken
{
    bool HasChanged { get; }
    
    bool ActiveChangeCallbacks { get; }
    
    IDisposable RegisterChangeCallback(Action<object> callback, object state);
}

接着注册 Callback

代码语言:javascript
复制
token.RegisterChangeCallback(state =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");
}, configurationRoot);

启动程序,修改配置文件,触发 Callback

多次修改配置文件没有效果?

因为 IChangeToken 这个对象只能使用一次,也就是说捕获到变更并且执行代码之后,需要再重新获取一个新的 IChangeToken,再次注册

代码语言:javascript
复制
token.RegisterChangeCallback(state =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");

    token = configurationRoot.GetReloadToken();
    token.RegisterChangeCallback(state2 =>
    {
        Console.WriteLine();
    }, configurationRoot);
}, configurationRoot);

这将变成一个无限循环的过程,微软实际上提供了一个比较方便使用的快捷的扩展方法,这个方法可以帮助我们轻松地处理这件事,也就意味着每次触发完成以后可以重新绑定

代码语言:javascript
复制
ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () =>
{
    Console.WriteLine($"Key1:{configurationRoot["Key1"]}");
    Console.WriteLine($"Key2:{configurationRoot["Key2"]}");
    Console.WriteLine($"Key3:{configurationRoot["Key3"]}");
});

第一个参数是获取 IChangeToken 的方法

第二个参数是处理变更的注入方法

启动程序,修改配置文件,多次触发 Callback

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 12 | 配置变更监听:配置热更新能力的核心
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档