ASP。网络核心修改配置文件后怎么自动加载更新

  介绍

这篇文章主要讲解了ASP。网络核心修改配置文件后怎么自动加载更新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP。网络核心修改配置文件后怎么自动加载更新”吧!

<强>前言

在ASP。网络核心默认的应用程序模板中,配置文件的处理如下面的代码所示:

config.AddJsonFile (   ,路径:“appsettings.json",   ,可选:没错,   ,reloadOnChange:真的   );   config.AddJsonFile (   美元,路径:“appsettings。{env.EnvironmentName} .json"   ,可选:没错,   ,reloadOnChange:真的   );

appsettings。json和appsettings。{env.EnvironmentName}。json两个配置文件都是可选的,并且支持当文件被修改时能够重新加载。

可以在ASP。网络核心应用中利用这个特性,实现修改配置文件之后,不需要重启应用,自动加载修改过的配置文件,从而减少系统停机的时间。实现的步骤如下:

<强>使用配置API进行注入

假设要在程序中注入这样一个配置类型:

public  class  WeatherOption  {   ,public  string  City {组,得到,,,}   ,public  int  RefreshInterval {组,得到,,,}   }

在appsettings。json中添加的配置如下:

{   ,“weather": {   ,“city":,“GuangZhou"   ,“refreshInterval": 120   ,}   }

在启动。cs的ConfigureServices方法中使用配置API进行注入,代码如下:

public  void  ConfigureServices (IServiceCollection 服务),{   ,services.Configure (Configuration.GetSection (“weather"));   ,services.AddControllers ();   }

这个步骤很关键,通过这个配置API可以把注入内容和配置所在的节点关联起来。如果有兴趣了解底层实现的话,可以继续查看这个OptionsConfigurationServiceCollectionExtensions。cs .

通过这种方式注册的内容,都是支持当配置文件被修改时,自动重新加载的。

<强>在控制器(控制器)中加载修改过后的配置

控制器(控制器)在ASP。网络核心应用的依赖注入容器中注册的生命周期是作用域,即每次请求都会创建新的控制器实例。这样只需要在控制器的构造函数中注入IOptionsSnapshot参数即可,代码如下:

[ApiController]   (路线(“(控制器)“)   时间:public  class  WeatherForecastController  ControllerBase  {      ,private  WeatherOption 选择;      ,public  WeatherForecastController (   ,IOptionsSnapshot选项   ,){=,,this.option  options.Value;   ,}      ,//GET /weatherforcase/选项   ,(HttpGet (“options"))   ,public  ActionResult GetOption (), {   ,return 选择;   ,}   }

当然,如果不希望在控制器中使用这个IOptionsSnapshot接口类型(会带来一些对现有代码重构和修改,还是有一定的风险的),可以在ConfigureServices中添加对WeatherOption的注入,代码如下:

public  void  ConfigureServices (IServiceCollection 服务),{   ,services.Configure (Configuration.GetSection (“weather"));   ,//添加对,WeatherOption 的注入,,生命周期为,Scoped ,,这样每次请求都可以获取新的配置值。   ,services.AddScoped (serviceProvider =祝辞,{   ,var  snapshot =, serviceProvider.GetService在();   ,return  snapshot.Value;   ,});   ,services.AddControllers ();   }

这样在控制器中就不需要注入IOptionsSnapshot类型了,最终控制器的代码如下:

[ApiController]   (路线(“(控制器)“)   时间:public  class  WeatherForecastController  ControllerBase  {      ,private  WeatherOption 选择;      ,public  WeatherForecastController (   WeatherOption 选项   ,){=,this.option 选择;   ,}      ,//GET /weatherforcase/选项   ,(HttpGet (“options"))   ,public  ActionResult GetOption (), {   ,return 选择;   ,}   }

这样控制器就无需修改任何代码即可加载修改过后的新配置。

<强>在中间件(中间件)中加载修改过后的配置

中间件(中间件)在ASP。网的核心应用的依赖注入容器中注册的生命周期是单例,即单例的,只有在当应用启动时,根据中间件创建处理连时创建一次全局实例,所以只能通过注入IOptionsMonitor

ASP。网络核心修改配置文件后怎么自动加载更新