首页 > 其他分享 >使用IOptionsSnapshot读取appsettings配置文件,将Json映射到对象

使用IOptionsSnapshot读取appsettings配置文件,将Json映射到对象

时间:2022-09-25 19:00:25浏览次数:68  
标签:读取 配置文件 get appsettings IOptionsSnapshot Json using public string

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-DABHN6U\\MSSQLSERVER2014;uid=sa;pwd=Lz38275292;database=NewAps;MultipleActiveResultSets=true;",
    "RedisConnection": "127.0.0.1:6379"
  },
  "Smtp": {
    "Server": "smtp.youzack.com",
    "UserName": "zack",
    "Password": "hello9999",
    "AllowedHosts": "*"
  }

}

  新添要映射节点 ConnectionStrings、Smtp 对应的类:

 public class SmtpSettings
    {
        public string Server { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
    }

  

 public class DbSettings
    {
        public string DefaultConnection { get; set; }
        public string RedisConnection { get; set; }
    }

  注册服务:

//注入配置服务到容器,以便读取appsetting.json
builder.Services.AddOptions()
    .Configure<DbSettings>(m => builder.Configuration.GetSection("ConnectionStrings").Bind(m))
    .Configure<SmtpSettings>(m => builder.Configuration.GetSection("Smtp").Bind(m));

  读取:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using System.Net.WebSockets;
using TestWebApplication.Configuration;

namespace TestWebApplication.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ReadConfigUseOptionsController : ControllerBase
    {
        private readonly IOptionsSnapshot<DbSettings> optDbSetting;
        private readonly IOptionsSnapshot<SmtpSettings> optSmtpSetting;
        private readonly ILogger logger;
        public ReadConfigUseOptionsController(ILogger<ReadConfigUseOptionsController> logger, IOptionsSnapshot<DbSettings> optDbSetting, IOptionsSnapshot<SmtpSettings> optSmtpSetting)
        {
            this.logger = logger;
            this.optDbSetting = optDbSetting;
            this.optSmtpSetting = optSmtpSetting;
        }

        [HttpGet("ReadDbSettings")]
        public async Task<ActionResult<DbSettings>> ReadDbSettings()
        {
            var db = optDbSetting.Value;
            return Ok(db);
        }
        [HttpGet("ReadSmtpSettings")]
        public async Task<ActionResult<SmtpSettings>> ReadSmtpSettings()
        {
            var db = optSmtpSetting.Value;
            return Ok(db);
        }

    }


}

  注意:

IOptions<> 类型有三种方式:

1. IOptions<T>  配置更改后,必须重启程序才能获取新值。

2. IOptionsMonitor<T> 配置更改后,立即读取新值。

3. IOptionsSnapshot<T> 配置更改后,立即读取新值,但在同范围里会保持一致性。

读取后不需要更改:使用IOptions<T>  ,否则使用IOptionsSnapshot<T>

 

标签:读取,配置文件,get,appsettings,IOptionsSnapshot,Json,using,public,string
From: https://www.cnblogs.com/friend/p/16728483.html

相关文章

  • 规范你的 JSON 配置,试试 JSON schema
    不知道大家在写一些JSON配置时会不会经常觉得麻烦,每次都要打开文档去核对字段名称对不对、结尾有没有s、结构是否正确、是不是数组等问题。然而我最近发现一些开源项目......
  • 命令行传递 JSON 参数执行 Python 脚本
    先定义一个简单的Python脚本greeter.py。#greeter.pyimportsysimportjsonparam=sys.argv[1]user_info=json.loads(param)print(f'Welcome,{user_info["......
  • Service模块读取AppSettings.json
    创建对应的映射类:publicclassAppSettings{//publicConnectionstringsConnectionStrings{get;set;}publicstringPurchaseUrl{get;set;}pub......
  • python-json
    pythonjson处理json写入json文件点击查看代码importjsonjson_data={"name":"Tom","age":18,"score":{"math":98,"chines......
  • 自定义的配置文件,如何注入到SpringBoot?
    一、简介在实际的项目开发过程中,我们经常需要将某些变量从代码里面抽离出来,放在配置文件里面,以便更加统一、灵活的管理服务配置信息。比如,数据库、eureka、zookeeper、redi......
  • 解决golang json: unsupported value: NaN
    遇到这种json:unsupportedvalue:NaN大部分是因为我们处理数值型的数据时,出错,导致变成了NaNnoanumber然后序列化json的时候,如果值是NaN,就会出现这个错误 仔细......
  • Python json中dumps与dump及loads与load的区别
    Python中dumps与dump及loads与load的区别这篇文章主要介绍了Python中dumps与dump、loads与load的区别,json模块提供了一种很简单的方式来编码和解码JSON数据。其中两个主要......
  • NodeJs——Parsing error: Cannot read file '.../tsconfig.json'.eslint
    前言之前没有问题,今天打开项目后,ts文件中的import突然报Parsingerror:Cannotreadfile'.../tsconfig.json'.eslint,查了下stackoverflow内容以下为大家给出的一些......
  • centos部署Django三:编写相关配置文件及启动服务
     1.进入到项目的根目录,编写uwsgi.xml配置文件*:centos用的不是uwsgi.ini,而是uwsgi.xml<uwsgi><socket>127.0.0.1:8997</socket><!--内部端口,自定义......
  • java使用ClassLoader加载配置文件(properties)
    importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.InputStream;importjava.util.Properties;publiccl......