2.4配置的熱更新「深入淺出ASP.NET Core系列」
阿新 • • 發佈:2018-11-03
希望給你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裡面,有可能寫在自定義的配置檔案罷了。
我是.NET架構師張飛洪,入行10年有餘,人不堪其憂,吾不改其樂,謝謝您的關注。