.NET Core开发实战(第13课:配置绑定:使用强类型对象承载配置数据)--学习笔记...

13 | 配置绑定:使用强类型对象承载配置数据

要点:

1、支持将配置值绑定到已有对象

2、支持将配置值绑定到私有属性上

继续使用上一节代码

首先定义一个类作为接收配置的实例

class Config
{public string Key1 { get; set; }public bool Key5 { get; set; }public int Key6 { get;  set; }
}

接着看一下配置文件,appsettings.json

{"Key1": "Value1","Key2": "Value2","Key5": true,"Key6": 0
}

新增一个引用包

  • Microsoft.Extensions.Configuration.Binder

这个包的作用就是让我们能够很方便的把配置绑定到强类型上面去

主程序

var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json", optional:true, reloadOnChange:true);
var configurationRoot = builder.Build();var config = new Config()
{Key1 = "config key1",Key5 = false,Key6 = 100
};configurationRoot.Bind(config);Console.WriteLine($"Key1:{config.Key1}");
Console.WriteLine($"Key5:{config.Key5}");
Console.WriteLine($"Key6:{config.Key6}");

启动程序,输出如下:

Key1:Value1
Key5:True
Key6:0

可以看出,绑定的字段都是从配置中读出来的

实际上通常意义来讲,配置文件不会这么简单,一般都是有嵌套格式

{"Key2": "Value2","Key6": 0,"OrderService": {"Key1": "order key1","Key5": true,"Key6": 200}
}

在这种情形下,需要把 p 绑定给 config 对象

configurationRoot.GetSection("OrderService").Bind(config);

这样就可以对不同的配置进行分组,并且分别绑定,避免配置混在一起

启动程序,输出如下:

Key1:order key1
Key5:True
Key6:200

也就是说可以从任意的节来读取配置,并且绑定到类型上面

这里定义的所有类型,所有的字段都是 public,但有一些场景下面可能是 private,对于私有的字段,默认情况下,是不会去绑定的,也不允许赋默认值,可以在定义时设置

class Config
{public string Key1 { get; set; }public bool Key5 { get; set; }public int Key6 { get; private set; } = 100;
}

主程序

var config = new Config()
{Key1 = "config key1",Key5 = false
};configurationRoot.GetSection("OrderService").Bind(config);

启动程序,输出如下:

Key1:order key1
Key5:True
Key6:100

可以看到 Key6 的值是100,没有发生变化,而配置中的值是200

要让私有变量生效,实际上 Bind 还有另外一个参数

configurationRoot.GetSection("OrderService").Bind(config,binderOptions => { binderOptions.BindNonPublicProperties = true; });

启动程序,输出如下:

Key1:order key1
Key5:True
Key6:200

这样一来,私有字段也都可以从配置里面赋值了

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

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

相关文章

工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布

12月4日,2020年中国工业信息安全大会暨全国工控安全深度行(京津冀站)在北京国际会议中心举行。大会由国家工业信息安全发展研究中心、工业信息安全产业发展联盟主办,以“贯彻总体国家安全观,把牢工控安全基准线”为主题。会上,国家…

ASP.NET Core Razor 视图预编译、动态编译

0x01 前言ASP.NET Core在默认发布情况下,会启动预编译将试图编译成xx.Views.dll,也许在视图中打算修改一处很细小的地方我们需要再重新编译视图进行发布。下面我将从 ASP.NET Core 3 之前版本到 ASP.NET Core 3X 之后版本的一个配置列下下方供大家参考。0x02 预编译…

《C++ Primer》2.1.2节练习

练习2.3 #include <iostream> using namespace std;int main() {unsigned u 10, u2 42;cout << u2 - u << endl;cout << u - u2 << endl;int i 10, i2 42;cout << i2 - i << endl;cout << i - i2 << endl;cout <…

如何构建基于.NET Core和云环境下的微服务技术体系?

这个内核用处不大&#xff0c;但.NET 内核却666随着业务需求的增长&#xff0c;我们现在开发非常大型和复杂的项目&#xff0c;需要更多时间来构建和部署。每当质量检查报告任何问题时&#xff0c;我们都需要对其进行调试或修复&#xff0c;然后部署整个代码。为了降低这些复杂…

UVA - 11059 Maximum Product-暴力枚举

输入n个元素组成的序列s,找出一个乘积最大的连续子序列&#xff0c;如果这个子序列不是整数&#xff0c;则输出0. 解题思路&#xff1a; 枚举起点和终点&#xff0c;把中间的数相乘&#xff0c;然后找到最大的结果。 代码如下&#xff1a; #include <iostream> using…

好用的vp n推荐2020_哪个牌子的沐浴露好,2020年最新沐浴露选购测评,好用好闻易清洗沐浴露品牌推荐...

您好&#xff0c;感谢您关注并阅读本文。声明&#xff1a;本文系作者原创&#xff0c;未经作者授权不得转载、引用。如果您看完本文觉得对您有帮助&#xff0c;请点赞、收藏和关注&#xff0c;作者感激不尽。本文详细地介绍一下沐浴露使用方法和选购建议指南&#xff0c;以及沐…

【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇...

欢迎大家阅读《朝夕Net社区技术专刊》第1期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;本文通过5大部分进行解读&#xff1a…

【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题-Corre3.1WebApi配置集成日志/配置Swagger...

欢迎大家阅读《朝夕Net社区技术专刊》第2期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;本文通过3大部分进行解读&#xff1a…

一文读懂开源许可证异同

对开源许可证异同的对比并非源自担忧。对开源许可证进行比较并不容易&#xff0c;什么 copyleft 啦&#xff0c;什么宽松许可证啦&#xff0c;光 GNU 就有 GPL 2 和 GPL 3 之分&#xff0c;OSI 批准的许可证就有八十多个&#xff0c;而开源生态下存在了数百个许可证。对于我们这…

WARNING: Ignoring invalid distribution -ip

原因: 之前安装插件失败/中途退出&#xff0c;导致插件安装出现异常导致 解决方案: 进入你的项目里面,进入venv文件夹,进入Lib,进入site-packages,删除~ip开头的文件如图所示

根据后序和中序求二叉树的层序

题目描述&#xff1a;给出二叉树的后序和中序序列&#xff0c;输出二叉树的层序遍历序列。 题目分析&#xff1a;中序遍历为左根右&#xff0c;后序遍历为左右根&#xff0c;所以后序遍历的最后一个节点为根节点&#xff0c;在中序遍历上找出根节点的位置&#xff0c;将树分为…

mysql数据剪切到新表_6、MySQL核心DDL语句

命令类型服务器端命令获取命令帮助数据库管理查看数据库基础变量SQL组成创建修改删除表管理创建示例一示例二示例三一个常见的创建表结构的示例表修改改名表结构修改添加/删除字段修改字段键管理索引索引管理视图视图操作命令类型服务器端命令DDL&#xff1a;数据定义语言&…

pycharm里面下载pip(不用去官网)

注意:pycharm版本较低的话右侧有个"",一样的效果

C++ stringstream输入方式

在题目中&#xff0c;我们有时候会遇到不知道要输入多少个元素&#xff0c;这个时候我们要怎么读取呢&#xff1f; 采用stringstream输入方式&#xff0c;头文件为< sstream > 代码如下&#xff1a; #include <iostream> #include <cstring> #include <…

基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...

每个人都习惯使用Python去完成机器学习和深度学习的工作&#xff0c;但是对于习惯于某种特定语言的人来说&#xff0c;转型不是那么容易的事。这两年我花了不少时间在Python&#xff0c;毕竟工作的重心也从移动开发转为机器学习和深度学习。感谢我的老板给我很大的空间去开拓新…

ValueError: check_hostname requires server_hostnamejie解决方案

原因: 1. 下载包带的插件等级高了 2. 网络代理没关 3.pip误删 解决方案: 对应上面原因: 1.终端(terminal)输入代码 pip install urllib31.25.112. 3.针对第三点 https://blog.csdn.net/weixin_53051556/article/details/118566675

万稞pw80线切割编程软件_模具设计编程培训哪些内容?

模具设计编程培训哪些内容&#xff1f;一&#xff0e;UG、PROE三维产品设计班1)产品设计流程&#xff1b;2)三维造型、各类产品结构设计3)产品表面处理工艺4)UG、PROE 3D造型、抄板、工程图、逆向工程、点云处理。5)100多套家电、医疗器械、汽车、手机、电动工具设计案例讲解二…

UVA - 548 Tree

输入一个二叉树的中序和后序遍历&#xff0c;请你输出一个叶子节点&#xff0c;该叶子节点到根的数值总和最小&#xff0c;且这个叶子是编号最小的那个。 输入&#xff1a; 您的程序将从输入文件中读取两行(直到文件结尾)。第一行是树的中序遍历值序列,第二行是树的后序遍历值序…