zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    Corn fields(玉米田)状压dp入门第一题 洛谷P1879 poj3254
    蒟蒻7.16题解(选值+遛狗+树上博弈)
    萌新自我介绍
    题解 AT1279 【How are you?】
    题解 AT2271 【Lining Up】
    P1879 [USACO06NOV]玉米田Corn Fields题解(注释版)
    呜呜呜~我怎么这么弱?????(选值、遛狗、树上博弈题解)
    Python学习笔记(八)—使用正则获取网页中所需要的信息。
    Python学习笔记(七)—爬取网易今日热点新闻及导出Excel。
    Python学习笔记(六)——查询天气脚本
  • 原文地址:https://www.cnblogs.com/wyt007/p/8053968.html
Copyright © 2011-2022 走看看