.Net Core 配置文件读取IOptions,IOptionsMonitor,IOptionsSnapshot

作者:一事冇诚 时间:2024-06-05 09:31:28 

前言

众所周知,appsetting.json 配置文件是.Net 的重大革新之心,抛开了以前繁杂的xml文件,使用了更简洁易懂的json方式,简直不要太舒服了!东西虽然好,但怎么在程序中读取这个配置呢,是每个新手必须要跨过去的坑(当然也是包括我这个菜狗子)。

遇事不明上注入,只要是遇到不知道怎么办的事,首先要往注入方便想,框架有了这个配置文件,必然配备了简单直接的读取API,按照我的习惯,直接上代码:

首先,我们在配置文件中,增加 Demo 配置节点:

{
 "Logging": {
   "LogLevel": {
     "Default": "Information",
     "Microsoft.AspNetCore": "Warning"
   }
 },
 "Demo": {
   "Value1": "1",
   "Value2": "2",
   "Value3": "3",
   "Value4": "4"
 }
}

在需要用到配置文件的地方,注入 IConfiguration 服务接口

private readonly IConfiguration _configuration;

public ValuesController(IConfiguration configuration)
{
   _configuration = configuration;
}

通常,我们比较直接的方式是通过 GetSection 获取对应的配置节点,然后再获取对应的配置项

var section = _configuration.GetSection("Demo");
var value1 = section.GetValue("Value1", "1");

如果 Demo 节点内还有更深的节点,GetSection 可以通过 : 深入到对应的下一个节点

appsetting.json 

{
 "Logging": {
   "LogLevel": {
     "Default": "Information",
     "Microsoft.AspNetCore": "Warning"
   }
 },
 "Demo": {
   "Value1": "1",
   "Value2": "2",
   "Value3": "3",
   "Value4": "4",
   "Model" {
     "Name": "小二",
     "Phone": "12345678911"
   }
 }
}
var model = _configuration.GetSection("Demo:Model");

有些小伙伴可能就会问了,那我每个需要用到的地方都需要直接以字符串作为参数去读取配置,以后要是突然改了配置项,岂不是非常麻烦;

这点小伙伴们大可放心,你可以定义一个实体类,然后绑定上去,以后有什么更改了,直接重命名对应的属性就行了,实例代码

方法一:

var options = new DemoOptions();
_configuration.GetSection("Demo").Bind(options);

方法二:

var options2 = _configuration.GetSection("Demo").Get<DemoOptions>();

方法三:在 Startup.cs、.Net 6 以上在 Program.cs- 中使用依赖注入方式,以下是 .Net 6 

builder.Services.Configure<DemoOptions>(builder.Configuration.GetSection("Demo"));

在需要使用的地方注入  IOptions<TOptions> 即可获取到配置值,需要注意的是,IOptions 是单例(Singleton)服务,即在应用启动时进行注册,后续更改配置文件,该 IOptions 将不会同步更新,依然还是旧值 

private readonly DemoOptions _demoOptions;
public ValuesController(IOptions<DemoOptions> options)
{
   _demoOptions = options.Value;
}

如需要配置进行热更新,只需要改成注入 IOptionsMonitor<TOptions> 或者 IOptionsSnapshot<TOptions>;IOptionsSnapshot<TOptions>的生命周期是作用域(Scoped),每次请求都会重新获取一次配置;IOptionsSnapshot<TOptions> 的生命周期是单例(Singleton),与 IOptions<TOptions> 不一样的是当配置文件发生改变时,将会自动同步响应。

来源:https://www.cnblogs.com/ysmc/p/16637781.html

标签:.Net,Core,文件,读取,IOptions,IOptionsMonitor,IOptionsSnapshot
0
投稿

猜你喜欢

  • 网站导航设计的6大分类

    2010-07-12 18:46:00
  • Python XML RPC服务器端和客户端实例

    2022-07-26 05:41:57
  • Mysql的慢SQL优化思路和规范详解

    2024-01-22 22:01:15
  • MySQL动态SQL拼接实例详解

    2024-01-20 15:13:55
  • python实现简单http服务器功能

    2023-03-24 15:36:58
  • python进行OpenCV实战之画图(直线、矩形、圆形)

    2022-05-30 06:36:05
  • 2007/12/23更新创意无限,简单实用(javascript log)

    2024-04-26 17:11:46
  • 了解WEB页面工具语言XML(三)支持工具

    2008-09-05 17:18:00
  • pybind11和numpy进行交互的方法

    2021-08-18 23:24:14
  • django模型中的字段和model名显示为中文小技巧分享

    2021-04-01 15:03:54
  • Python数据分析之使用scikit-learn构建模型

    2023-11-10 23:19:10
  • 用Python定时发送天气邮件

    2022-09-22 15:11:31
  • 使用基于Python的Tornado框架的HTTP客户端的教程

    2023-05-15 06:50:43
  • 在Python的Django框架的视图中使用Session的方法

    2023-06-22 07:10:15
  • 使用Pyhton集合set()实现成果查漏的例子

    2023-10-20 17:49:00
  • Node.js中的events事件模块知识点总结

    2024-05-08 10:11:37
  • matplotlib绘制两点间连线的几种方法实现

    2021-07-27 09:02:24
  • 详解Vue 全局引入bass.scss 处理方案

    2024-06-05 10:03:08
  • 对python dataframe逻辑取值的方法详解

    2021-08-23 03:09:38
  • PyQt5实现下载进度条效果

    2022-06-17 10:47:11
  • asp之家 网络编程 m.aspxhome.com