任务14:配置的热更新

 

热更新,默认是不支持的。git

网站正在运行,在不关掉网站的状况,修改了配置文件appsettings.json文件。当用户下一次请求的时候,直接拿到咱们的配置信息github

这个跟咱们在asp.net里面的config不同,咱们在更改web.config的内容后,站点会自动重启,从新加载。web

这个热更新就是之后咱们在修改了配置文件后,不会影响用户的访问。这是Configuration改进的比较有用的一个地方json

咱们只须要更改这一个地方IOptions修改成IOptionsSnapshotmvc

当你用到这种及时更新的配置信息就用IOptionsSnapshotapp

 

修改了配置信息后,咱们只须要刷新页面就能够了asp.net

 

实现的原理ide

在咱们以前的项目里 ,这里的AddJsonFile方法有另外两个参数函数

参数2:是否可选,当这个存文件不存在的时候,是否会抛出异常。这里咱们设置为fasle网站

参数3:reloadOnChange设置为true的话,当这个文件发生改变。就会从新加载这个文件。

 

using System;
using Microsoft.Extensions.Configuration;

namespace JsonConfig
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                .AddJsonFile("class.json",false,true);

            var configuration = builder.Build();

            Console.WriteLine($"ClassNo:{configuration["ClassNo"]}");
            Console.WriteLine($"ClassDesc:{configuration["ClassDesc"]}");

            Console.WriteLine("Students");

            Console.Write(configuration["Students:0:name"]);
            Console.WriteLine(configuration["Students:0:age"]);

            Console.Write(configuration["Students:1:name"]);
            Console.WriteLine(configuration["Students:1:age"]);

            Console.Write(configuration["Students:2:name"]);
            Console.WriteLine(configuration["Students:2:age"]);


            Console.ReadLine();

        }
    }
}
Program.cs

 

 

{
  "ClassNo": "1",
  "ClassDesc": "ASP.NET Core 101",

  "Students": [
    {
      "name": "jesse",
      "age": "13"
    },
    {
      "name": "jim",
      "age": "18"
    },
    {
      "name": "lisa",
      "age": "22"
    }
  ]
}
class.json

 

 

 可是在咱们的asp.net core mvc中并无看到咱们去加reloadOnChange这个动做。

core mvc中是经过这里的 CreateDefaultBuilder 来帮咱们完成的这一系列的操做。

 

 分析githb上的WebHost的源代码

https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs

在CreateDefaultBuilder方法里面默认reloadOnChage设置为了true。这就是为何咱们core mvc项目里面没有作任何操做,这里就已经能够热更新。

 

ConfigureAppConfiguration是上面的 WebHostBuilder 的一个扩展函数

咱们能够在这里调用ConfigureAppConfiguration方法,把默认的覆盖掉。取消掉了热更新。这样咱们的热更新就取消掉了。

相关文章
相关标签/搜索