第3章 3.2 配置系统 .NET Core配置系统

3.2.1 配置系统的基本使用

.NET Core中的配置系统支持非常丰富的配置源,包括文件(JSON、XML、INI等)、注册表、环境变量、命令行、Azure Key Vault等,配置系统还支持自定义配置源。

用配置系统开发包Microsoft.Extensions.Configuration(这是.NetCore 中配置系统的一个基础开发包),通过Microsoft.Extensions.Configuration.Json读取JSON配置文件:

在项目中添加一个JSON文件:

{"name": "枸杞泡茶","proxy": {"address": "192.168.1.250","port": "5432"}
}

设置文件属性:如果较新则复制

读取配置:


using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using System.Runtime.InteropServices;ConfigurationBuilder cfBuilder = new ConfigurationBuilder();
cfBuilder.AddJsonFile("config.json",optional:false,reloadOnChange:false);
IConfigurationRoot config = cfBuilder.Build();
string name = config["name"];
Console.WriteLine($"name={name}");
string proxyAddress = config.GetSection("proxy:address").Value;
Console.WriteLine($"proxyAddress={proxyAddress}");
Console.ReadKey();

调试结果:

3.2.2 使用选项方式读取配置

这是.NET Core中比较推荐的方式,因为他跟依赖注入机制结合的更好,且可实现配置修改后的自动刷新,所以更方便使用。在使用这种方式时需要安装两个包:

Microsoft.Extensions.Options

Microsoft.Extensions.Configuration.Binder

添加一个文件appsetting.json:

{"Logging": { "LogLevel": { "Default": "warning" } },"DB": {"DbType": "SQLServer","ConnectionString": "Data Source=.,Initial Catalog=DemoDB; Integrated Security=True"},"Smtp": {"Server": "smtp.youzack.com","UserName": "zack","Password": "hello888","AllowedHosts": "*"}
}

建立对应配置的模型:

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

选项方式读取配置时需要和依赖注入一起使用,因此创建一个类获取注入的选项值。

书中所讲,有三种泛型接口类型可使用:IOptions<T>IOptionsMonitor<T>IOptionsSnapshot<T>。结合三者的特性:IOptions<T>不能即时修改应用,IOptionsMonitor<T>在范围内不保持一致,IOptionsSnapshot<T>可在同一范围内保持一致。所以主要讲解了IOptionsSnapshot<T> 。

这是读取配置的Demo类:

class Demo
{private readonly IOptionsSnapshot<DbSettings> optDbSettings;private readonly IOptionsSnapshot<SmtpSettings> optSmtpSettings;public Demo(IOptionsSnapshot<DbSettings> optDbSettings, IOptionsSnapshot<SmtpSettings> optSmtpSettings){this.optDbSettings = optDbSettings;this.optSmtpSettings = optSmtpSettings;}public void Test(){var db = optDbSettings.Value;Console.WriteLine($"数据库:{db.DbType},{db.ConnectionString}");var smtp = optSmtpSettings.Value;Console.WriteLine($"Smtp:{smtp.Server},{smtp.UserName},{smtp.Password}");}
}

编写注入服务到容器的代码:

// Configure and read from appsettings.json
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfigurationRoot config = configBuilder.Build();// Set up dependency injection
ServiceCollection services = new ServiceCollection();services.AddOptions().Configure<DbSettings>(e => config.GetSection("DB").Bind(e)).Configure<SmtpSettings>(e => config.GetSection("smtp").Bind(e));
services.AddTransient<Demo>();// Build service provider
using (var sp = services.BuildServiceProvider())
{while (true){using (var scope = sp.CreateScope()){var spScope = scope.ServiceProvider;var demo = spScope.GetRequiredService<Demo>();demo.Test();// Access and print SMTP settingsvar smtpSettings = spScope.GetRequiredService<IOptionsSnapshot<SmtpSettings>>().Value;Console.WriteLine($"Smtp: {smtpSettings.Server}, {smtpSettings.UserName}, {smtpSettings.Password}");}Console.WriteLine("可以改配置啦");Console.ReadKey();}
}

启动调试,不退出程序修改配置文件并保存:

Enter健继续执行:程序内读取的参数已经发生变化:

3.2.3 从命令行读取配置

通过NuGet安装:

Microsoft.Extensions.Configuration

Microsoft.Extensions.Configuration.CommandLine

读取:

using Microsoft.Extensions.Configuration.CommandLine;
using Microsoft.Extensions.Configuration;ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddCommandLine(args);
IConfigurationRoot config = configBuilder.Build();
string name = config["Name"];
Console.WriteLine($"Name:{name}");

启动调试:

3.2.4 从环境变量读取配置

安装NuGet包 Microsoft.Extensions.Configuration.EnvironmentVariables

例如,有这样一个环境变量:

读取:

using Microsoft.Extensions.Configuration;ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddEnvironmentVariables("DM_");IConfigurationRoot config = configBuilder.Build();
string home = config["HOME"];
//name = Environment.GetEnvironmentVariable("DM_HOME");
Console.WriteLine($"Home:{home}");
Console.ReadKey();

读取结果

3.2.5 其他配置提供程序

讲了一个Apollo,可以在.NET Core 中连接Apollo读取配置

3.2.6 案例:开发自己的配置提供程序

这里讲了杨老师自己开发的一个配置一共程序:Zack.AnyDBConfigProvider。

3.2.7 多配置源问题

.NET Core 的配置系统中允许添加多个配置源,且遵循一个原则:后添加的配置提供程序中的配置覆盖之前的配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21079.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 类加载器深度解析(含实战案例)

上期文章内容&#xff1a;JVM类加载过程详解&#xff1a;从字节码到内存的蜕变之旅 目录 一、类加载器的本质是什么&#xff1f; 二、类加载机制全景 1.1 三阶段生命周期 1.2 关键数据结构 三、类加载器体系架构 2.1 四层标准类加载器 2.2 类加载器树形结构 四、双亲委派…

仿 Sora 之形,借物理模拟之技绘视频之彩

来自麻省理工学院、斯坦福大学、哥伦比亚大学以及康奈尔大学的研究人员携手开源了一款创新的3D交互视频模型——PhysDreamer&#xff08;以下简称“PD”&#xff09;。PD与OpenAI旗下的Sora相似&#xff0c;能够借助物理模拟技术来生成视频&#xff0c;这意味着PD所生成的视频蕴…

业务架构、数据架构、应用架构和技术架构

TOGAF(The Open Group Architecture Framework)是一个广泛应用的企业架构框架&#xff0c;旨在帮助组织高效地进行架构设计和管理。 TOGAF 的核心就是由我们熟知的四大架构领域组成:业务架构、数据架构、应用架构和技术架构。 企业数字化架构设计中的最常见要素是4A 架构。 4…

【开源免费】基于SpringBoot+Vue.JS善筹网站(JAVA毕业设计)

本文项目编号 T 205 &#xff0c;文末自助获取源码 \color{red}{T205&#xff0c;文末自助获取源码} T205&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

vue+elementplus创建初始化安装

项目创建初始化 D:\Tool\mysql\education_vue 这个路径下cmd 或打开vscode&#xff0c;把项目丢进code中打开 安装element plus Container 布局容器 | Element Plus npm install element-plus --save 把项目初始文件Homeview AboutView删了&#xff0c;Router index.js中删一…

Word接入DeepSeek(API的作用)

1.打开”Word”&#xff0c;点击“文件”。 2.点击“选项”。 3.点击“信任中心”——“信任中心设置”。 4. 勾选”启用所有宏“&#xff0c;点击”确定“。 5.点击“自定义功能区”&#xff0c;勾选上“开发工具”&#xff0c;点击“确定”。 6.返回“文件——开发工具“下的…

Macos机器hosts文件便捷修改工具——SwitchHosts

文章目录 SwitchHosts软件下载地址操作添加方案切换方案管理方案快捷键 检测 SwitchHosts SwitchHosts 是一款 Mac 平台上的免费软件&#xff0c;它可以方便地管理和切换 hosts 文件&#xff0c;支持多种 hosts 文件格式。 软件下载地址 SwitchHosts 操作 添加方案 添加 …

Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅

摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…

汽车免拆诊断案例 | 2010 款路虎揽胜车空调偶尔出风异常

故障现象  一辆2010款路虎揽胜车&#xff0c;搭载5.0 L发动机&#xff0c;累计行驶里程约为16万km。车主反映&#xff0c;接通空调开关后&#xff0c;有时出风忽大忽小&#xff0c;有时不出风&#xff0c;有时要等2 min左右才出风&#xff1b;有时两三天出现一次&#xff0c;…

Django项目之订单管理part1

一.前言 我们前面把django的常用知识点给讲完了&#xff0c;现在我们开始项目部分&#xff0c;项目是一个订单管理系统&#xff0c;我们同时也会在项目之中也会讲一些前面没有用到的知识点。 项目大概流程如下&#xff1a; 核心的功能模块&#xff1a; 认证模块&#xff0c;用…

低代码与 Vue.js:技术选型与架构设计

在当下数字化转型的浪潮中&#xff0c;企业对应用开发的效率和质量有着极高的追求。低代码开发平台的兴起&#xff0c;为企业提供了一条快速构建应用的捷径&#xff0c;而 Vue.js 作为热门的前端框架&#xff0c;与低代码开发平台的结合备受关注。如何做好两者的技术选型与架构…

LlamaFactory可视化模型微调-Deepseek模型微调+CUDA Toolkit+cuDNN安装

LlamaFactory https://llamafactory.readthedocs.io/zh-cn/latest/ 安装 必须保证版本匹配&#xff0c;否则到训练时&#xff0c;找不到gpu cuda。 否则需要重装。下面图片仅供参考。因为cuda12.8装了没法用&#xff0c;重新搞12.6 cudacudnnpytorch12.69.612.6最新&#xf…

【GPT】从GPT1到GPT3

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文&#xff1a; https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…

Jredis和SpringDataRedis学习笔记

jredis基础操作 jredis连接池 其中有个静态方法getJedis能够将练级池中的连接拿取出来并返回 通过setMaxWaitMitllis设置一个响应时间&#xff0c;如果连接池里面没有连接&#xff0c;那么请求连接方在等待超过响应时间时就会报错 springDataRedis 通过这样一个代码将redisTe…

【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键&#xff0c;或者扩展按键的需求。亦或者是在某些场景下&#xff0c;禁止用户按下某些按键的业务需求。 这两种需求&#xff0c;鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…

vite调试node_modules下面插件

在使用vite进行开发的时候,我们可能想要修改node_modules中插件的源码.特别是集成一个SDK&#xff0c;需要调试去判断问题时&#xff0c;或者研究第三方源码时后; vite默认是走缓存的&#xff0c;所以当修改后不会看到你打印的日志&#xff0c;这个时候有几种方法可以选择; 方式…

大数据开发治理平台~DataWorks(核心功能汇总)

目录 数据集成 功能概述 使用限制 功能相关补充说明 数据开发 功能概述 数据建模 功能概述 核心技术与架构 数据分析 功能概述 数据治理 数据地图 功能概述 数据质量 功能概述 数据治理资产 功能概述 使用限制 数据服务 功能概述 数据集成 DataWorks的数据…

JAVA生产环境(IDEA)排查死锁

使用 IntelliJ IDEA 排查死锁 IntelliJ IDEA 提供了强大的工具来帮助开发者排查死锁问题。以下是具体的排查步骤&#xff1a; 1. 编写并运行代码 首先&#xff0c;我们编写一个可能导致死锁的示例代码&#xff1a; public class DeadlockExample {private static final Obj…

【DeepSeek】Mac m1电脑部署DeepSeek

一、电脑配置 个人电脑配置 二、安装ollama 简介&#xff1a;Ollama 是一个强大的开源框架&#xff0c;是一个为本地运行大型语言模型而设计的工具&#xff0c;它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xff0c;可以让用户执行一条命令就在本地运…

挑战一星期复现一个项目——安全帽项目

本项目为识别安全帽项目&#xff0c;基于yoloV5模型&#xff0c;接下来&#xff0c;我将一步一步展示我的完整复现过程以及遇到的问题和解决方案。 前言 我们在利用GPU进行深度学习的时候&#xff0c;都要去NVIDIA的官网下载CUDA的安装程序和cudnn的压缩包&#xff0c;然后再…