【.Net8教程】(一)读取配置文件全面总结

2023-12-24 03:36

本文主要是介绍【.Net8教程】(一)读取配置文件全面总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:.net8.0

1. 准备条件

先在appsettings.Development.json或appsettings.json添加配置
添加一个DbOption

{"DbOption": {"Conn": "foolishsunday@csdn"}
}

2.直接读取json配置节点的几种写法

在Main函数中读取json配置
方式一

var conn1 = builder.Configuration["DbOption:Conn"];

方式二

var conn2 = builder.Configuration.GetValue<string>("DbOption:Conn");

方式三

var conn3 = builder.Configuration.GetSection("DbOption").GetSection("Conn").Value;

方式四

var conn4 = builder.Configuration.GetSection("DbOption")["Conn"];

3.转化为类或record类型

定义类

    public class DbOption{public string Conn { get; set; }}

转化

DbOption opt = builder.Configuration.GetSection(nameof(DbOption)).Get<DbOption>();

4.通过注入IConfiguration方式

    [ApiController][Route("[controller]")]public class TestController : ControllerBase{private readonly IConfiguration _configuration;public TestController(IConfiguration configuration){_configuration = configuration;}[HttpPost]public async Task<IActionResult> GetConfig(){var conn1 = _configuration["DbOption:Conn"];var conn2 = _configuration.GetValue<string>("DbOption:Conn");var conn3 = _configuration.GetSection(nameof(DbOption)).GetSection("Conn").Value;return Ok();}   }

5.或通过Options模式(推荐)

写法一

builder.Services.Configure<DbOption>(builder.Configuration.GetSection(nameof(DbOption)));

写法二

builder.Services.AddOptions<DbOption>().Bind(builder.Configuration.GetSection(nameof(DbOption)));

写法三

builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption));

然后通过注入IOptions、IOptionsMonitor或IOptionsSnapshot获取

    [ApiController][Route("[controller]")]public class DemoController : ControllerBase{private readonly DbOption _dbOption;public DemoController(IOptionsSnapshot<DbOption> dbOption){_dbOption = dbOption.Value;//注意此处为.Value}   }

推荐使用IOptionsSnapshot

Options模式有三个接口IOptions、IOptionsMonitor或IOptionsSnapshot
IOption :单例,一旦生成就不会再更改,除非通过代码的方式更改;
OptionsMonitor :也是单例,但是它只要配置有变更,它就会更新,能通过代码的方式更改值;
IOptionsSnapshot :作用域注册,一次请求里值不会变,在配置文件更新的下一次请求,它的值会更新,但是它不能跨范围通过代码的方式更改值,只能在当前范围(请求)内有效

校验

其中写法二与写法三,如果忘记了配置,获取到值为null,是不会报错的。
如果需要在获取到null时报错,则可以添加Validate校(可抛OptionsValidationException异常)

builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption))
.Validate(option =>
{if (string.IsNullOrEmpty(option.Conn)) return false;else return true;
});

6. 注意:调试和发布后启动,读取配置文件的区别

1、当启动vs调试时,由于启动的环境是Development,所以读取配置文件会优先读取appsettings.Development.json;如果没有值,才读取appsettings.json的值;
2、但当我们发布程序启动后(如双击.exe启动),则读取的是appsettings.json文件。
此区别可能会造成初学者产生混淆。

这篇关于【.Net8教程】(一)读取配置文件全面总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530423

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动