您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在asp.net core中配置重新加載應用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
asp.net core重新加載應用配置Intro
我把配置放在了數據庫或者是Redis里,配置需要修改的時候我要直接修改數據庫,然后調用一個接口去重新加載應用配置,于是就嘗試寫一個運行時重新加載配置的接口。
Configuration 重新加載實現
重新加載配置的接口其實很簡單,經過看 Configuration
的源碼可以知道,如果想要重新加載應用配置,需要一個 IConfigurationRoot
對象,而 IConfigurationRoot
其實可以直接拿注入服務中的 IConfiguration
對象,服務中的 IConfiguration
對象也是實現了 IConfigurationRoot
接口的實例。后面我們一起看源碼就更清晰了。
來看實現重新加載配置的代碼
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace TestWebApplication.Controllers { [Route("api/[controller]")] public class ConfigurationsController : Controller { private readonly IConfigurationRoot _configuration; public ConfigurationsController(IConfiguration configuration) { _configuration = configuration as IConfigurationRoot; } [HttpGet] public IActionResult Get() { return Ok(new { RootUser = _configuration.GetAppSetting("RootUser") // 這里 GetAppSetting 是一個自定義擴展方法,獲取AppSettings 節點下的配置信息 }); } [HttpPut] public IActionResult Put() { _configuration.Reload(); return Ok(); } } }
是不是很簡單,下面我們來嘗試一下,你可以參考這個示例項目
因為默認的項目配置會監聽 appsettings.json 文件是否修改,如果已修改就會重新reload,這里我新加一個文件,這里設置 reloadOnChange
為 false
,示例代碼如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration(configBuilder => { configBuilder.AddJsonFile("abc.json", optional: true, reloadOnChange: false); }) .UseStartup<Startup>();
abc.json 的文件內容如下:
{ "AppSettings": { "TestNumber": 12, "RootUser": "WeihanLi" } }
dotnet run
啟動網站,然后在瀏覽器中訪問 http://localhost:5000/api/configurations
然后我們修改 abc.json 文件
{ "AppSettings": { "TestNumber": 12, "RootUser": "WeihanLi 123" } }
修改保存之后刷新剛才的頁面,可以看到還是剛才的內容,證明并沒有重新加載配置,接下來嘗試我們的重新加載配置方法
使用 postman 或 fiddler 或其他你喜歡的工具發一個 PUT 請求到 http://localhost:5000/api/configurations
,這里我使用 postman 調用 PUT 接口重新加載配置
返回 200 即接口調用成功,重新刷新剛才的頁面就可以看到頁面上的數據已經發生變化,這也就證明了我們重新加載配置的接口生效了。
源碼解析
來看 ConfigurationBuilder
在 Build 的時候做了什么,ConfigurationBuilder
源碼
可以看到這里最后返回的是一個 IConfigurationRoot
對象,再來看 IConfigurationRoot
源碼
可以看到 IConfigurationRoot
定義了一個 Reload
的方法,這個方法會從下面的 Providers
中重新加載配置,看到這里我們就知道可以通過 IConfiguration
的 Reload
方法來重新加載應用程序的配置了,然后我們來看 WebHost.CreateDefaultBuilder(args).Build()
做了什么
https://github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/WebHost.cs
這里我們可以看到為什么 appsettings.json 文件會自動 reload 配置,可以看到最后返回了一個 WebHostBuilder
對象
看 Asp.Net core WebHostBuilder
對象的 Build
方法 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs
在 BuildCommonServices
可以看到這樣一段代碼 https://github.com/aspnet/AspNetCore/blob/master/src/Hosting/Hosting/src/WebHostBuilder.cs
上面我們已經知道 ConfigurationBuilder
Build 之后返回的是一個 IConfigurationRoot
對象,而這里注入是一個 IConfiguration
對象(IConfigurationRoot
實現 IConfiguration
接口),所以我們就可以從依賴注入中獲取 IConfiguration
對象直接當作 IConfigurationRoot
來使用,這也就是為什么我們會直接獲取一個 IConfiguration
對象直接 as IConfigurationRoot
ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網頁和網站。
關于怎么在asp.net core中配置重新加載應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。