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

但願給你3-5分鐘的碎片化學習,多是坐地鐵、等公交,聚沙成塔,水滴石穿,謝謝關注。git

你們知道一般咱們修改網站的配置文件好比,webconfig的時候,網站須要重啓才能讀取到最新的修改,所謂熱更新就是網站無需重啓,修改完配置文件,直接F5就能夠看到效果以下圖所示:github

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

 

修改IOption爲IOptionsSnapshot

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

 

上一節當中咱們使用IOption來做爲注入,此次咱們改爲IOptionSnapshot,注意若是咱們是在Controller裏也是同樣的,見下圖web

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

 

修改成IOptionsSnapshot後,便可達到熱更新,很是簡單。json

內部機制

咱們來看下ASP.NET Core內部是如何作到的?app

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,看下內部都作了些什麼。ui

找到函數CreateDefaultBuilderblog

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

 

咱們看到關鍵代碼:

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

其中optional和reloadOnChange默認爲true,這就是問題的關鍵,內部已經另起進程,自動幫咱們作配置改變的事件監聽了,這就是不作重寫覆蓋同樣能達到熱更新的目的所在。

覆蓋的目的是,咱們有時候配置文件不必定都寫在appsettings.json裏面,有可能寫在自定義的配置文件罷了。

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

相關文章
相關標籤/搜索