分享一个 .NET Core 使用选项方式读取配置内容的详细例子

iamge

前言

在 .NET Core 中,可以使用选项模式(Options Pattern)来读取和管理应用程序的配置内容。

选项模式通过创建一个 POCO(Plain Old CLR Object)来表示配置选项,并将其注册到依赖注入容器中,方便地在应用程序中访问和使用配置内容,这种方式避免了硬编码和字符串操作,是一种类型安全的访问方式。

而且将配置内容集中管理在一个 POCO 类中,便于维护和修改,降低了配置信息分散的风险。

下面看看 .NET Core 是如何使用选项方式读取配置内容。

Step By Step 步骤

  1. 创建一个 .NET Core Console 项目

  2. 从 Nuget 安装以下包

    Microsoft.Extensions.Configuration
    Microsoft.Extensions.Configuration.Binder
    Microsoft.Extensions.Configuration.Json
    Microsoft.Extensions.DependencyInjection
    Microsoft.Extensions.Options

  3. 添加配置文件 appsettings.json,配置内容参考如下

    {"Logging": { "LogLevel": { "Default": "Warning" } },"DB": {"DbType": "SQLServer","ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true"},"Smtp": {"Server": "smtp.youzack.com","UserName": "zack","Password": "hello888"},"AllowedHosts": "*"
    }
    
  4. 创建建对应配置项的两个模型类,即 POCO 类

    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; }
    }   
    
  5. 创建测试读取配置的 Demo 类(重点看注释

    using Microsoft.Extensions.Options;class Demo
    {// IOptionsSnapshot<T> 在配置改变后,可以不重新运行程序就读到新的值private readonly IOptionsSnapshot<DbSettings> optDbSettings;private readonly IOptionsSnapshot<SmtpSettings> optSmtpSettings;// 构造方法注入 IOptionsSnapshotpublic 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}");}
    }	
    
  6. 打开 Program.cs,编写读取配置代码(重点看注释

    // 1. 引入依赖注入、配置等命名空间
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;// 2. 读取配置文件
    ConfigurationBuilder configBuilder = new ConfigurationBuilder();
    configBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);   
    IConfigurationRoot config = configBuilder.Build();// 3. 创建依赖注入容器
    ServiceCollection services = new ServiceCollection();// 4.1 选项方式注入配置服务
    services.AddOptions().Configure<DbSettings>(e => config.GetSection("DB").Bind(e)).Configure<SmtpSettings>(e => config.GetSection("Smtp").Bind(e));// 4.2 注入读取配置的服务
    services.AddTransient<Demo>();// 5. 使用
    using (var sp = services.BuildServiceProvider())
    {// 建立了一个无限循环,方便修改配置文件反复测试while (true){using (var scope = sp.CreateScope()){var spScope = scope.ServiceProvider;var demo = spScope.GetRequiredService<Demo>();demo.Test();}Console.WriteLine("可以改配置啦");Console.ReadKey();}
    }
    

总结

  1. 总的来说,使用选项方式读取配置内容可以提高代码的可读性、维护性和灵活性,使用选项方式读取配置是 .NET Core 中推荐的方式,因为它不仅和依赖注入机制结合得更好,而且它可以实现配置修改后自动刷新,所以使用起来更方便
  2. 除了从 Json 文件读取配置,还可以从命令行、环境变量等不同的源读取
  3. .NET Core 中的配置系统支持 “可覆盖的配置”,也就是我们可以向 ConfigurationBuilder 中注册多个配置提供程序,后添加的配置提供程序可以覆盖先添加的配置提供程序

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

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

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

相关文章

弗洛伊德算法——C语言

弗洛伊德算法&#xff0c;是一种用于解决所有顶点对之间最短路径问题的经典算法&#xff0c;该算法通过动态规划的方法计算出从每个顶点到其他所有顶点的最短路径。 弗洛伊德算法的基本思想是逐步考虑每一个顶点作为中间点&#xff0c;更新所有顶点对之间的最短路径。它通过以…

js 前端 Function.prototype.call.call(0[‘toString‘], *, 16)

这个函数将 数组转任意进制 Function.prototype.call.call(0[toString], *, 16)

Oracle--存储结构

总览 一、逻辑存储结构 二、物理存储结构 1.数据文件 2.控制文件 3.日志文件 4.服务器参数文件 5.密码文件 总览 一、逻辑存储结构 数据块是Oracle逻辑存储结构中的最小的逻辑单位&#xff0c;一个数据库块对应一个或者多个物理块&#xff0c;大小由参数DB_BLOCK_SIZE决…

Java语法和基本结构介绍

Java语法和基本结构是Java编程的基础&#xff0c;它决定了Java代码的书写方式和程序的结构。以下是Java语法和基本结构的一些关键点&#xff1a; 1.标识符和关键字&#xff1a;Java中的标识符是用来标识变量、函数、类或其他用户自定义元素的名称。关键字是预留的标识符&#x…

大模型日报2024-06-16

大模型日报 2024-06-16 大模型资讯 大模型产品 MARS5 TTS&#xff1a;开源高拟真语音合成 摘要: MARS5 TTS是一款开源语音合成模型&#xff0c;能以2-3秒音频为参考&#xff0c;在140多种语言中复制高难度场景&#xff0c;如体育解说、电影和动漫等。 AI工具首发平台&#xff1…

Android之实现两段颜色样式不同的文字拼接进行富文本方式的显示

一、使用SpannableString进行拼接 1、显示例子 前面文字显示红色&#xff0c;后面显示白色&#xff0c;显示在一个TextView中&#xff0c;可以自动换行 发送人姓名: 发送信息内容2、TextView <TextViewandroid:id"id/tv_msg"android:layout_width"wrap_c…

02:浮点型数据类型存储空间大小

OpenJudge - 02:浮点型数据类型存储空间大小 描述 分别定义float&#xff0c;double类型的变量各一个&#xff0c;并依次输出它们的存储空间大小&#xff08;单位&#xff1a;字节&#xff09;。 输入 无。 输出 一行&#xff0c;两个整数&#xff0c;分别是两个变量的存储空间…

[C++ STL] vector 详解

标题&#xff1a;[C STL] vector 详解 水墨不写bug 目录 一、背景 二、vector简介 三、vector的接口介绍 &#xff08;1&#xff09;默认成员函数接口 i&#xff0c;构造函数&#xff08;constructor&#xff09; ii&#xff0c;析构函数&#xff08;destructor&#xff0…

Verilog综合出来的图

Verilog写代码时需要清楚自己综合出来的是组合逻辑、锁存器还是寄存器。 甚至&#xff0c;有时写的代码有误&#xff0c;vivado不能识别出来&#xff0c;这时打开综合后的schematic简单查看一下是否综合出想要的结果。 比如&#xff1a;误将一个always模块重复一遍&#xff0c;…

天翼云认证专家解决方案架构师(理论)

1.某大型互联网公司为了提升应用程序和基础设施的稳定性&#xff0c;计划引入自动化监控工具。以下哪些工具可以满足公司的需求? A.Grafana B.Nagios C.Prometheus D.Jenkins 2.天翼智能边缘云ECX是位于网络边缘位置的云&#xff0c;兼具云和CDN的特性&#xff0c;将计算、存…

使用百度的长文本转语音API时无法下载.MP3文件

今天是学生们交作业的时候&#xff0c;结果是我最忙碌的一天&#xff0c;各种改bug。 有个学生来问&#xff1a; 我在百度提供的API代码(长文本转语音)的基础上添加了下载生成的.MP3文件的代码&#xff0c;运行之后成功建成了.MP3文件&#xff0c;但是文件的内容确实以下的报错…

【数据结构】利用单链表再实现通讯录

在之前顺序表的实现中&#xff0c;我们利用了顺序表实现了通讯录&#xff0c;基于上篇文章学习了单链表&#xff0c;本篇文章将介绍如何利用单链表再实现通讯录。 1. 结构体用户数据 实现结构体的函数&#xff1a; //⽤⼾数据 typedef struct PersonInfo {char name[NAME_MA…

指定GPU跑模型

加上一个CUDA_VISIBLE_DEVICES0,2就行了&#xff0c;使用0卡和2卡跑模型&#xff0c;注意多卡有时候比单卡慢&#xff0c;4090无NVlink&#xff0c;数据似乎是通过串行的方式传输到多个gpu的&#xff0c;只不过单个gpu是并行计算&#xff0c;数据在gpu与gpu之间似乎是串行传输的…

如何通过Outlook大附件插件,加强外发附件的安全性和管控力度?

因邮件的便捷性和普遍性&#xff0c;企业间业务往来通常会采取邮箱业务&#xff0c;沟通使用成本也比较低&#xff0c;但容易出现附件太大无法上传的问题。Outlook大附件插件是为解决邮件系统中附件大小限制问题而开发的一系列工具。 使用邮件发送附件时&#xff0c;可能会遇到…

第九站:Java黑——安全编码的坚固防线(第②篇)

4. 验证和过滤输入数据示例&#xff1a;使用Apache Commons Lang 对输入数据进行验证和过滤是防止多种安全漏洞的关键步骤&#xff0c;包括但不限于SQL注入和命令注入。Apache Commons Lang库提供了一些实用方法来帮助进行字符串操作和验证。以下是一个简单的示例&#xff0c;…

基于51单片机万年历设计—显示温度农历

基于51单片机万年历设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 本系统采用单片机DS1302时钟芯片LCD1602液晶18b20温度传感器按键蜂鸣器设计而成。 1.可以显示年月日、时分秒、星期、温度值。…

掌握Mock.js基本使用:快速模拟API实现增删改查

在项目中使用Mock.js进行增删改查操作&#xff0c;可以模拟后端接口&#xff0c;方便前端开发和测试。下面是一个简单的示例&#xff0c;展示如何在Vue 2项目中使用Mock.js实现增删改查功能。 1. 安装依赖 npm install mockjs --save2. 配置Mock.js 在项目的根目录下创建一个…

代码随想录算法训练营DAY36补| 435. 无重叠区间、 763.划分字母区间

训练营计划更新了&#xff0c;补一下DAY36多出来的两道题 435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 class Solution(object):def eraseOverlapIntervals(self, intervals):""":type intervals: List[List[int]]:rtype: int"""if…

前端跨域问题的解决办法,两种类型

跨域问题是由于同源策略的原因&#xff0c;在协议(HTTP或HTTPS)不同、端口号(8080或8881)不同、主机IP(182.92.178.25或者182.92.178.26)不同时而导致的不能进行数据交换的问题。 当后端没有做跨域时&#xff0c;前端就需要自己配置。 类型一&#xff1a;使用代理服务器的方法…

《书生·浦语大模型实战营》第4课 学习笔记:XTuner 微调 LLM:1.8B、多模态、Agent

文章大纲 1. 大模型微调简介2 快速上手2.1 环境安装2.2 前期准备2.2.1 数据集准备2.2.2 模型准备2.2.3 配置文件选择2.2.4 小结 2.3 配置文件修改2.4 模型训练2.4.1 常规训练2.4.2 使用 deepspeed 来加速训练2.4.3 训练结果2.4.4 小结 2.5 模型转换、整合、测试及部署2.5.1 模型…