首页 > 其他分享 >.Net Core 配置文件读取 - IOptions、IOptionsMonitor、IOptionsSnapshot

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

时间:2022-09-02 00:33:36浏览次数:99  
标签:Core GetSection 配置文件 Demo IOptionsMonitor Net configuration IOptions

原文链接:https://www.cnblogs.com/ysmc/p/16637781.html

  众所周知,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> 不一样的是当配置文件发生改变时,将会自动同步响应。

 

标签:Core,GetSection,配置文件,Demo,IOptionsMonitor,Net,configuration,IOptions
From: https://www.cnblogs.com/ysmc/p/16637781.html

相关文章

  • nginx配置文件单独创建和管理
    1、在nginx主配置文件nginx.conf的http模块下引入配置文件夹(注意路径的正确性)http{   include/usr/local/nginx/conf/conf.d/*.conf;   #这里就是引入的子配置文......
  • .net core微服务系列之前言
    微服务概念其实已经流行了不短的年头了,只是大部分实战都是在以java为主的大型互联网公司使用,.net在国内的市场,作为.net程序猿们都懂得,就拿北京来说,前2年别说微服务了,就......
  • SUPERVISOR监控tomcat配置文件
    Supervisor安装教程参考:https://www.cnblogs.com/brad93/p/16639953.htmltomcat安装教程参考:https://www.cnblogs.com/brad93/p/16646286.html 下方为Supervisor管理to......
  • 给正在运行的mongodb启动添加配置文件
    因为一开始启动容器的时候就没有指定配置文件,无论怎么修改容器中的/etc/mongd.conf.org文件都无法生效所以直接修改启动脚本添加$@的参数实现1、复制容器中的文件/usr/lo......
  • logback.xml 配置文件
    logback.xml<?xmlversion="1.0"encoding="UTF-8"?><configuration><!--定义日志文件的存储地址勿在LogBack的配置中使用相对路径--><!--<propertynam......
  • .net core中AOP的使用(一)
    理解AOPAOP全称AspectOrientedProgramming,即面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。我理解其实就是在程序运行时,动态的将需......
  • liunx系统docker部署.net core3.1
    此篇文章演示基本的基于docker部署.netcore服务,liunx系统腾讯云ubuntu,.netcore版本3.1。1.安装dockeraptinstalldocker.io2.拉取.netcore依赖镜像dockerpullm......
  • 把数据库连接字符串放到配置文件中
    当项目交到客户方后,数据库连接相关信息有可能需要更改,如数据库服务器的ip地址,用户名,密码等,为了避免到时候需多次更改数据库连接字符串信息,需要将连接字符串放到配置文件中,......
  • SQLite Entity Framework Core 使用 DBFirst
    1.使用DBBrowserforSQLite建立数据库db文件2.NuGet包管理器下载安装如下几3个包  3.使用程序包管理器控制台生成实体PM>Scaffold-DbContext-Force"DataSourc......
  • HttpClient和IHttpClientFactory借助第三方库生成的客户端Refit andWebApiClientCore
    理解ASP.NETCore-发送Http请求(HttpClient)  注:本文隶属于《理解ASP.NETCore》系列文章,请查看置顶博客或点击此处查看全文目录前言在.NET中,我们有很多发送Ht......