【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

相关文章
相关标签/搜索