.NET Core开发实战(第12课:配置变更监听)--学习笔记
生活随笔
收集整理的這篇文章主要介紹了
.NET Core开发实战(第12课:配置变更监听)--学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
12 | 配置變更監聽:配置熱更新能力的核心
這一節講解如何使用代碼來監視配置變化并做出一些動作
當我們需要追蹤配置發生的變化,可以在變化發生時執行一些特定的操作
配置主要提供了一個 GetReloadToken 方法,這就是跟蹤配置的關鍵方法
接著使用上一節的代碼
var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json", optional:true, reloadOnChange:true); var configurationRoot = builder.Build();IChangeToken token = configurationRoot.GetReloadToken();IChangeToken 有兩個屬性和一個方法
public interface IChangeToken {bool HasChanged { get; }bool ActiveChangeCallbacks { get; }IDisposable RegisterChangeCallback(Action<object> callback, object state); }接著注冊 Callback
token.RegisterChangeCallback(state => {Console.WriteLine($"Key1:{configurationRoot["Key1"]}");Console.WriteLine($"Key2:{configurationRoot["Key2"]}");Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); }, configurationRoot);啟動程序,修改配置文件,觸發 Callback
多次修改配置文件沒有效果?
因為 IChangeToken 這個對象只能使用一次,也就是說捕獲到變更并且執行代碼之后,需要再重新獲取一個新的 IChangeToken,再次注冊
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);這將變成一個無限循環的過程,微軟實際上提供了一個比較方便使用的快捷的擴展方法,這個方法可以幫助我們輕松地處理這件事,也就意味著每次觸發完成以后可以重新綁定
ChangeToken.OnChange(() => configurationRoot.GetReloadToken(), () => {Console.WriteLine($"Key1:{configurationRoot["Key1"]}");Console.WriteLine($"Key2:{configurationRoot["Key2"]}");Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); });第一個參數是獲取 IChangeToken 的方法
第二個參數是處理變更的注入方法
啟動程序,修改配置文件,多次觸發 Callback
總結
以上是生活随笔為你收集整理的.NET Core开发实战(第12课:配置变更监听)--学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能对话引擎:两天快速打造疫情问答机器人
- 下一篇: ASP.NET Core Web API