最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解asp.net core重新加載應(yīng)用配置

 更新時間:2019年04月20日 08:51:00   作者:WeihanLi  
這篇文章主要介紹了asp.net core重新加載應(yīng)用配置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

asp.net core重新加載應(yīng)用配置Intro

我把配置放在了數(shù)據(jù)庫或者是Redis里,配置需要修改的時候我要直接修改數(shù)據(jù)庫,然后調(diào)用一個接口去重新加載應(yīng)用配置,于是就嘗試寫一個運行時重新加載配置的接口。

Configuration 重新加載實現(xiàn)

重新加載配置的接口其實很簡單,經(jīng)過看 Configuration 的源碼可以知道,如果想要重新加載應(yīng)用配置,需要一個 IConfigurationRoot 對象,而 IConfigurationRoot 其實可以直接拿注入服務(wù)中的 IConfiguration 對象,服務(wù)中的 IConfiguration 對象也是實現(xiàn)了 IConfigurationRoot 接口的實例。后面我們一起看源碼就更清晰了。

來看實現(xiàn)重新加載配置的代碼

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 節(jié)點下的配置信息
      });
    }

    [HttpPut]
    public IActionResult Put()
    {
      _configuration.Reload();
      return Ok();
    }
  }
}

是不是很簡單,下面我們來嘗試一下,你可以參考這個示例項目

因為默認的項目配置會監(jiān)聽 appsettings.json 文件是否修改,如果已修改就會重新reload,這里我新加一個文件,這里設(shè)置 reloadOnChangefalse,示例代碼如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(configBuilder =>
        {
          configBuilder.AddJsonFile("abc.json", optional: true, reloadOnChange: false);
        })
        .UseStartup<Startup>();

abc.json 的文件內(nèi)容如下:

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi"
 }
}

dotnet run 啟動網(wǎng)站,然后在瀏覽器中訪問 http://localhost:5000/api/configurations

然后我們修改 abc.json 文件

{
 "AppSettings": {
  "TestNumber": 12,
  "RootUser": "WeihanLi 123"
 }
}

修改保存之后刷新剛才的頁面,可以看到還是剛才的內(nèi)容,證明并沒有重新加載配置,接下來嘗試我們的重新加載配置方法

使用 postman 或 fiddler 或其他你喜歡的工具發(fā)一個 PUT 請求到 http://localhost:5000/api/configurations,這里我使用 postman 調(diào)用 PUT 接口重新加載配置

返回 200 即接口調(diào)用成功,重新刷新剛才的頁面就可以看到頁面上的數(shù)據(jù)已經(jīng)發(fā)生變化,這也就證明了我們重新加載配置的接口生效了。

源碼解析

來看 ConfigurationBuilder 在 Build 的時候做了什么,ConfigurationBuilder 源碼

可以看到這里最后返回的是一個 IConfigurationRoot 對象,再來看 IConfigurationRoot 源碼

可以看到 IConfigurationRoot 定義了一個 Reload 的方法,這個方法會從下面的 Providers 中重新加載配置,看到這里我們就知道可以通過 IConfigurationReload 方法來重新加載應(yīng)用程序的配置了,然后我們來看 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

上面我們已經(jīng)知道 ConfigurationBuilder Build 之后返回的是一個 IConfigurationRoot 對象,而這里注入是一個 IConfiguration 對象(IConfigurationRoot 實現(xiàn) IConfiguration 接口),所以我們就可以從依賴注入中獲取 IConfiguration 對象直接當(dāng)作 IConfigurationRoot 來使用,這也就是為什么我們會直接獲取一個 IConfiguration 對象直接 as IConfigurationRoot

Memo

到此就暫時結(jié)束了,希望你能有所收獲~

以上所述是小編給大家介紹的asp.net core重新加載應(yīng)用配置詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評論

台南市| 廊坊市| 阿拉善盟| 南康市| 怀集县| 肥乡县| 侯马市| 黎城县| 保德县| 兴和县| 屏东县| 宣城市| 河间市| 城市| 白河县| 石阡县| 平邑县| 永州市| 京山县| 长治市| 富民县| 温州市| 辽源市| 越西县| 玉山县| 北辰区| 彭山县| 肥西县| 麻栗坡县| 阳信县| 金山区| 白沙| 茂名市| 新巴尔虎左旗| 宜州市| 石楼县| 仪陇县| SHOW| 磴口县| 京山县| 雷波县|