杨中科 配置系统

1、配置系统入门

说明

1、传统Web.config配置的缺点,之前DI讲到过
2、为了兼容,仍然可以使用Web.config和ConfigurationManager类,但不推荐。
3、.NET 中的配置系统支持丰富的配置源,包括文件(json、xml、ini等)、注册表、环境变量、命令行、Azure Key Vault等,还可以配置自定义配置源。画以跟踪配置的改变,可以按照优先级覆盖。

Json文件配置

1、创建一个json文件,文件名随意,比如config.json,设置“如果较新则复制”。参考备注
2、NuGet安装Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.Json.
3、编写代码,先用简单的方式读取配置。

示例

在这里插入图片描述

导入nuget包
在这里插入图片描述
在这里插入图片描述

读取配置原始方法

ConfigurationBuilder configBuilder= new ConfigurationBuilder();
configBuilder.AddJsonfile(
"config.json",optional: false, reloadOnChange: false);

IConfigurationRoot config= configBuilder.Build();
string name = config["name"];
string proxyAddress = config.GetSection("proxy:address").Value;

optional参数表示这个文件是否可选。
初学时,建议optional设置为false,这样写错了的话能够及时发现。
reloadonchange参数表示如果文件修改了,是否重新加载配置

在这里插入图片描述

运行结果:

在这里插入图片描述

绑定读取配置(*)

1、可以绑定一个类,自动完成配置的读取,
2、NuGet安装:Microsoft.Extensions.Configuration.Binder
3、Server server = configRoot.GetSection(“proxy”).Get()

修改配置文件
在这里插入图片描述

添加类
在这里插入图片描述

安装包
在这里插入图片描述
修改方法
在这里插入图片描述
运行结果:
在这里插入图片描述
继续改进:
在这里插入图片描述
在这里插入图片描述
运行结果
在这里插入图片描述

配置系统2 选取方式读取

用法

1、推荐使用选项方式读取,和DI结合更好,且更好利用“'reloadorchange”机制。
2、NuGet安装:Microsoft.Extensions.OptionsMicrosoft.Extensions.Configuration.Binder,当然也需要Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json.
3、读取配置的时候,DI要声明lOptions、lOptionsMonitor、lOptionsSnapshot等类型lOptions不会读取到新的值;和IOptionsMonitor相比,IOptionssnapshot会在同一个范围内(比如ASP.NET Core一个请求中)保持一致。建议用IOptionssnapshot。

在这里插入图片描述
比如把A数据库表得内容,拷贝的B表中,但是由于中途发生改变,数据被复制到其他数据库中。

演示代码

1、在读取配置的地方,用l0ptionsSnapshot注入。不要在构造函数里直接读取l0ptionsSnapshot.Value,而是到用到的地方再读取,否则就无法更新变化。

2、如下配置
services.AddOptions().Configure(e =>config.GetSection(“DB”).Bind(e)).Configure(e =>config.Getsection(“smtp”).Bind(e));
services.AddTransient();//不能用Singleton

示例:

添加DI 注入类

在这里插入图片描述

安装包
在这里插入图片描述

读取代码

在这里插入图片描述
编写DI 注入 与 导包
在这里插入图片描述
在这里插入图片描述
只读Proxy
在这里插入图片描述
在这里插入图片描述
注入
在这里插入图片描述
在这里插入图片描述
运行结果
在这里插入图片描述

体现配置修改后,读取内容立即改变
在这里插入图片描述
测试:
在这里插入图片描述
在debug 文件下,修改
在这里插入图片描述
此时测试内容不会改变
在同一个Scope中,手动创建一个Scope
在这里插入图片描述
测试结果:
在这里插入图片描述

配置系统3 其他配置提供者

命令行方式配置

1、配置框架还支持从命令行参数、环境变量等地方读
2、NuGet安装
Microsoft.Extensions.Configuration.CommandLine.3、configBuilder.AddcommandLine(args)4、参数支持多种格式,
比如: server=127.0.0.1、- -server=127.0.0.1、- -server 127.0.0.1(注意在键值之间加空格)、/server=127.0.0.1、/server 127.0.0.1(注意在键值之间加空格)。格式不能混用。
5、调试的时候,Vs中简化命令行传参数的方法。

示例:

现有的代码不用改动,通过命令行的方式,改变配置
在这里插入图片描述

配置安装包

在这里插入图片描述
读取命令行参数

在这里插入图片描述

此时运行项目读不到数据

命令行传参的两种方式

方式一,cmd

在这里插入图片描述
运行结果
在这里插入图片描述
不存在运行时,更改配置,他的值是在程序启动时,赋予的。

方式二 vs中

在这里插入图片描述
运行结果:
在这里插入图片描述
运行结果:
在这里插入图片描述

更改代码,获取所有值
在这里插入图片描述

在这里插入图片描述
运行结果:
在这里插入图片描述
报错
在这里插入图片描述
发现复杂的格式,无法直接读取到

扁平化配置

1、对于环境变量、命令行等简单的键值对结构,如果想要进行复杂结构的配置,需要进行“扁平化处理”。对于配置的名字需要采用“层级配置”。例如: a : b: c。对于数字这样配置 : a: b:c:0、a: b:c:1、 a: b:c:2。
2、演示一下。
3、这个知识点在自定义配置Provider中还会用到。

示例:

比如新添加id[] 列
在这里插入图片描述

json 格式
在这里插入图片描述
修改打印语句:
在这里插入图片描述

赋值
在这里插入图片描述

方式三 环境变量方式
环境变量配置

1、NuGet安装:Microsoft.Extensions.Configuration.EnvironmentVariables.
2、然后configurationBuilder. AddEnvironmentVariables()
AddEnvironmentVariables()有无参数和有prefix参数的两个重载版本。无参数版本会把程序相关的所有环境变量都加载进来,由于有可能和系统中已有的环境变量冲突,因此建议用有prefix参数的AddEnvironmentVariables()。读取配置的时候,prefix参数会被忽略。
3、VS中调试时,避免修改系统环境变量,直接在VS中设置环境变量的方法。
在这里插入图片描述

也可以在VS 中添加环境变量,但对于复杂结构,同样需要采用扁平化处理
在这里插入图片描述

导入包

在这里插入图片描述
改写代码
在这里插入图片描述

运行结果:
在这里插入图片描述

还可以通过前缀区分
在这里插入图片描述

此时,改变配置文件格式
在这里插入图片描述
运行结果:
在这里插入图片描述
这种方式可以避免和其他项目配置冲突

其他配置源

1、还支持ini、xml等格式的配置源,如果想用查询文档即
可。
2、还支持在运行时、调试时加载不同的json文件;3、还内置或者第三方支持中心化配置服务器,比如使用Apolo、Nacos等开源服务器,或者使用Azure、阿里云等的配置服务。具体看文档即可。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值