搜索

查看: 3122|回复: 11

[ASP.NET] .Net Core 配置文件读取IOptions,IOptionsMonitor,IOptionsSnapshot

[复制链接]
发表于 2023-5-4 11:33:33 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:33:33 3122 11 看全部
前言
众所周知,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();
方法三:在 Startup.cs、.Net 6 以上在 Program.cs- 中使用依赖注入方式,以下是 .Net 6
builder.Services.Configure(builder.Configuration.GetSection("Demo"));
在需要使用的地方注入  IOptions 即可获取到配置值,需要注意的是,IOptions 是单例(Singleton)服务,即在应用启动时进行注册,后续更改配置文件,该 IOptions 将不会同步更新,依然还是旧值
private readonly DemoOptions _demoOptions;
public ValuesController(IOptions options)
{
    _demoOptions = options.Value;
}
如需要配置进行热更新,只需要改成注入 IOptionsMonitor 或者 IOptionsSnapshot;IOptionsSnapshot的生命周期是作用域(Scoped),每次请求都会重新获取一次配置;IOptionsSnapshot 的生命周期是单例(Singleton),与 IOptions 不一样的是当配置文件发生改变时,将会自动同步响应。
到此这篇关于.Net Core 配置文件读取IOptions,IOptionsMonitor,IOptionsSnapshot的文章就介绍到这了,更多相关.Net Core 文件读取内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-28 21:18:43 | 显示全部楼层
无人岛屿颈 2023-6-28 21:18:43 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 10:44:55 | 显示全部楼层
心随674 2023-6-29 10:44:55 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 20:03:02 | 显示全部楼层
塞翁364 2023-6-29 20:03:02 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
回复

使用道具 举报

发表于 2023-6-30 02:57:38 | 显示全部楼层
惜颜705 2023-6-30 02:57:38 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
回复

使用道具 举报

发表于 2023-6-30 09:46:49 | 显示全部楼层
永远爱你冰塘 2023-6-30 09:46:49 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

发表于 2023-7-3 10:15:53 | 显示全部楼层
十二音阶囤 2023-7-3 10:15:53 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
回复

使用道具 举报

发表于 2023-7-3 17:52:26 | 显示全部楼层
123456825 2023-7-3 17:52:26 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-7-5 20:15:24 | 显示全部楼层
素色流年783 2023-7-5 20:15:24 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
回复

使用道具 举报

发表于 2023-7-5 23:26:01 | 显示全部楼层
尘埃416 2023-7-5 23:26:01 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 知鸟论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表