希望給你3-5分鍾的碎片化學習,可能是坐地鐵、等公交,積少成多,水滴石穿,謝謝關注。
大家知道通常我們修改網站的配置文件比如,webconfig的時候,網站需要重啟才能讀取到最新的修改,所謂熱更新就是網站無需重啟,修改完配置文件,直接F5就可以看到效果如下圖所示:

修改IOption為IOptionsSnapshot

上一節當中我們使用IOption來作為注入,這次我們改成IOptionSnapshot,注意如果我們是在Controller里也是一樣的,見下圖

修改為IOptionsSnapshot后,即可達到熱更新,非常簡單。
內部機制
我們來看下ASP.NET Core內部是如何做到的?

如上圖所示,我們增加了一行代碼:
builder.AddJsonFile("appsettings.json", false, true);
這里我們重寫並覆蓋了WebHost內部的CreateDefaultBuilder方法,並且設置了兩個bool型參數,其實我們也可以不做重寫,也就是上面的代碼注釋掉

一樣能達到熱更新的目的。
那么,到底WebHost這個靜態方法內部做了哪些工作,我們一起訪問下面源碼連接:https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs,看下內部都做了些什么。
找到函數CreateDefaultBuilder

我們看到關鍵代碼:
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
其中optional和reloadOnChange默認為true,這就是問題的關鍵,內部已經另起進程,自動幫我們做配置改變的事件監聽了,這就是不做重寫覆蓋一樣能達到熱更新的目的所在。
覆蓋的目的是,我們有時候配置文件不一定都寫在appsettings.json里面,有可能寫在自定義的配置文件罷了。
我是IT人張飛洪,入行10年有余,人不堪其憂,吾不改其樂,謝謝您的關注。