一、配置概述在.net framework平台中我们常见的也是最熟悉的就是.config
文件作为配置,控制台桌面程序是App.config
,Web就是web.config
,里面的配置格式为xml格式 。
文章插图
在xml里面有系统生成的配置项,也有我们自己添加的一些配置,最常用的就是appSettings节点 , 用来配置数据库连接和参数 。使用的话就引用包
System.Configuration.ConfigurationManager
之后取里面的配置信息:System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]
随着技术的发展这种配置方式显得冗余复杂,如果配置项太多层级关系参数表达凌乱,在.net core开始也将配置的格式默认成了json格式,包括现在很多的其它配置也是支持的,比如java中常用的yaml格式,为什么能支持这么多读取源和格式,其实质在于
配置提供程序
。目前.NET 中的配置是使用一个或多个配置提供程序
执行的 。配置提供程序使用各种配置源从键值对读取配置数据,这些配置程序稍后我们会看到,读取的配置源可以是如下这些:- 设置文件,appsettings.json
- 环境变量
- Azure Key Vault
- Azure 应用配置
- 命令行参数
- 已安装或已创建的自定义提供程序
- 目录文件
- 内存中的 .NET 对象
- 第三方提供程序
文章插图
上图我们可能没有直观的感受,现在写一个例子来看看
(1). 新建控制台应用程序:创建控制台使用的是.net 6.0 框架,vs 2022 。安装Microsoft.Extensions.Configuration.Json NuGet 包 , 该包提供json配置文件读取 。
Install-Package Microsoft.Extensions.Configuration.Json
文章插图
(2). 添加appsettings.json 文件
{"person": {"name": "XSpringSun","age": 18}}
(3). 使用json提供程序读取json配置new一个ConfigurationBuilder,添加json配置,AddJsonFile
是在包中的IConfigurationBuilder扩展方法 , 其它配置提供程序也是用这种扩展方法实现 。static void Main(string[] args){IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();Console.WriteLine(configuration["person:name"]);Console.WriteLine(configuration["person:age"]);Console.WriteLine("Hello, World!");Console.ReadLine();}
文章插图
可以看到已经取到json配置文件中的值了,配置值可以包含分层数据 。分层对象使用配置键中的 : 分隔符表示 。在下面的调试对象中我们可以看到实际configuration的Providers 提供程序数组有一个值,就是我们的JsonConfigurationProvider , 并且JsonConfigurationProvider里面已经读取了json的数据存储在Data数组中 。
对于如上几行代码干了什么呢:
- 将 ConfigurationBuilder 实例化(new ConfigurationBuilder) 。
- 添加 "appsettings.json" 文件,由 JSON 配置提供程序识别(AddJsonFile("appsettings.json")) 。
- 使用 configuration 实例获取所需的配置
Config
类用来转换json:namespace ConfigDemo{public class Config{public Person? person { get; set; }}public class Person {public string? name { get; set; }public int age { get; set; }}}
绑定配置IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();Config options = new Config();ConfigurationBinder.Bind(configuration, options);Person person = configuration.GetSection("person").Get<Person>();Console.WriteLine(options.person.name);Console.WriteLine(options.person.age);Console.WriteLine("-----------GetSection获取-------------");Console.WriteLine(person.name);Console.WriteLine(person.age);
文章插图
用了两种方式获取配置 , 第一种使用
ConfigurationBinder.Bind()
将整个配置绑定到对象Config
上 , 另外一种是使用IConfiguration的GetSection().Get<T>()
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C# Interlocked 类
- 无期迷途角色重置方法
- 怎么练轻功儿童(普通人怎么练飞行术)
- 在家怎么练轻功(怎样练轻功在空中飞)
- 二 【单元测试】Junit 4--eclipse配置Junit+Junit基础注解
- oppofindx3pro跑分_oppofindx3pro安兔兔跑分
- 只知道微信昵称删除了对方怎么找对方(彻底删除对方微信)
- 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China
- 三、Ocelot请求聚合与负载均衡
- 荣耀X30max手机参数_荣耀X30max详细配置