1. 程式人生 > >2.4配置的熱更新「深入淺出ASP.NET Core系列」

2.4配置的熱更新「深入淺出ASP.NET Core系列」

希望給你3-5分鐘的碎片化學習,可能是坐地鐵、等公交,積少成多,水滴石穿,謝謝關注。

大家知道通常我們修改網站的配置檔案比如,webconfig的時候,網站需要重啟才能讀取到最新的修改,所謂熱更新就是網站無需重啟,修改完配置檔案,直接F5就可以看到效果如下圖所示:

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

修改IOption為IOptionsSnapshot

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

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

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

修改為IOptionsSnapshot後,即可達到熱更新,非常簡單。

內部機制

我們來看下ASP.NET Core內部是如何做到的?

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

如上圖所示,我們增加了一行程式碼:

builder.AddJsonFile("appsettings.json", false, true);

這裡我們重寫並覆蓋了WebHost內部的CreateDefaultBuilder方法,並且設定了兩個bool型引數,其實我們也可以不做重寫,也就是上面的程式碼註釋掉

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

一樣能達到熱更新的目的。

那麼,到底WebHost這個靜態方法內部做了哪些工作,我們一起訪問下面原始碼連線:https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs,看下內部都做了些什麼。

找到函式CreateDefaultBuilder

2.4配置的熱更新「深入淺出ASP.NET Core系列」

 

我們看到關鍵程式碼:

config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)

其中optional和reloadOnChange預設為true,這就是問題的關鍵,內部已經另起程序,自動幫我們做配置改變的事件監聽了,這就是不做重寫覆蓋一樣能達到熱更新的目的所在。

覆蓋的目的是,我們有時候配置檔案不一定都寫在appsettings.json裡面,有可能寫在自定義的配置檔案罷了。

我是.NET架構師張飛洪,入行10年有餘,人不堪其憂,吾不改其樂,謝謝您的關注。