1. 程式人生 > >跟我一起學.NetCore之配置變更監聽

跟我一起學.NetCore之配置變更監聽

**前言** 通常程式中配置少不了,配置的修改也避免不了,配置的熱更新為此給應用程式帶來很大的便捷,不用重啟,提高使用者體驗;但往往有時候需要對修改進行審計,也就是需要記錄,有時候也會針對配置修改的時候觸發相關操作,比如說發郵件通知,或是其他業務操作等,遇到這種情況,配置變更監聽的用處就體現出來了,接下來就嚐嚐鮮去; **正文** 在看前兩篇文件的小夥伴可能會看到IConfiguration、IConfigurationProvider介面中有一個GetReloadToken()方法,之前只是註釋了一下,其實此方法返回的值就是變更通知的核心,如下圖的定義: ![img](https://i.loli.net/2020/08/20/JpSo7ijqdH2c4WZ.png) 看看返回的IChangeToken裡定義了什麼 ![img](https://i.loli.net/2020/08/20/tv2CAkxqnLZEo3P.png) 對於上面GetReloadToken其實最後返回的真正型別是ConfigurationReloadToken,繼承與IChangeToken,其作用就是為了通知程式:改變之後的配置源資料已經通過對應的IConfigurationProvider重新載入;看看其中是本質是啥? ![img](https://i.loli.net/2020/08/20/JTPVgBEl2I4tHMr.png) 通過以上程式碼顯示,其實ConfigurationReloadToken就是利用CancellationTokenSource在OnReload觸發的時候進行通知,這裡暫且不深入再研究CancellationTokenSource了,不然感覺要跑題了(可以私下研究研究),停,趕緊回來; 大概瞭解到變更通知的原理,再來回顧一下配置IConfigurationRoot和IConfigurationSection,其實這兩個微軟其實已經實現了兩個類,ConfigurationRoot和ConfigurationSection,有預設的實現,簡單看看是如何實現的,稍微進行了重點註釋哦; ```C# namespace Microsoft.Extensions.Configuration { // 實現了IConfiguration 和ConfigurationRoot public class ConfigurationRoot : IConfigurationRoot, IConfiguration, IDisposable { // 用於存放註冊進來的IConfigurationProvider,Provider的作用還記得嗎? private readonly IList