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

配置的熱更新

什麼是熱更新:通常來講,咱們建立的項目都沒法作到熱更新:即項目無需重啓,修改配置文件後讀取到的信息就是修改配置以後的git

咱們只須要吧項目中用到的IOptions改爲IOptionsSnapshot便可github

那麼是怎麼實現的呢?json

其實咱們在添加json配置文件的時候每每沒有添加後面兩個參數。app

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

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

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

下面咱們看一下CreateDefaultBuilder的源代碼ui

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

 

咱們能夠看到CreateDefaultBuilder已經默認加載appsetting.json文件,並啓用了熱更新.net

由於若是咱們一直要保持文件變動讀取的話,就要有一個線程一直對文件進行讀取和變動操做。若是咱們不想啓用默認熱更新的話,咱們能夠將熱更新覆蓋掉。

配置的框架設計

如下代碼部分爲僞代碼

 初始化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

相關文章
相關標籤/搜索