【ASP.NET Core快速入門】(六)配置的熱更新、配置的框架設計


配置的熱更新

什么是熱更新:一般來說,我們創建的項目都無法做到熱更新:即項目無需重啟,修改配置文件后讀取到的信息就是修改配置之后的

我們只需要吧項目中用到的IOptions改成IOptionsSnapshot即可

那么是怎么實現的呢?

其實我們在添加json配置文件的時候往往沒有添加后面兩個參數。

第一個參數(optional):(Whether the file is optional)是否可選,意思是如果配置文件不存在的時候是否要拋異常。

第二個參數(reloadOnChange):(Whether the configuration should be reloaded if the file changes.)是否改變的時候重新加載。

其實我們在asp.net core項目中即使不加這兩個參數,只要將IOptions改成IOptionsSnapshot就會進行熱更新,CreateDefaultBuilder已經替我們進行了熱更新。

下面我們看一下CreateDefaultBuilder的源代碼

WebHost.cs源代碼:https://github.com/aspnet/MetaPackages/blob/dev/src/Microsoft.AspNetCore/WebHost.cs

 

我們可以看到CreateDefaultBuilder已經默認加載appsetting.json文件,並啟用了熱更新

因為如果我們一直要保持文件變更讀取的話,就要有一個線程一直對文件進行讀取和變更操作。如果我們不想啟用默認熱更新的話,我們可以將熱更新覆蓋掉。

配置的框架設計

以下代碼部分為偽代碼

 初始化Builder

var builder = new ConfigurationBuilder()

將source添加到builder

aps.net corewei為我們提供了很多source和添加source的方式

builder.Add(source)

 

Build

var configurationRoot = builder.Build()

這里的Build實際上是對builder的每一個source進行Build,然后創建一個provider,添加到providers列表中,最后初始化了一個包含了所有的provider的配置

 

Use

使用的時候實際上是 遍歷所有的provider,找到可以使用的provider然后返回value

 

從上面可以看出來最重要的是source和provider

IConfigurationSource與IConfigurationProvider

 


 我們可以看出Json、Memory、Inl、Command、Xml都實現IConfigurationSource接口

 

 

抽象類ConfigurationProvider實現IConfigurationProvider接口,其他的FileIConfigurationProvider(基類,文件的讀取)、CommandIConfigurationProvider繼承ConfigurationProvider,JsonConfigurationProvider、XmlConfigurationProvider繼承FileIConfigurationProvider

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM