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 });