.Net Core——配置系统
本文章是我听B站杨中科的所做的笔记
杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili
1、说明
.net中的配置系统支持丰富的配置源,包括文件(json、xml、ini等)、注册表、环境变量、命令行、Azure Key Vault等,还可以配置自定义配置源。可以跟踪配置的改变,可以按照优先级覆盖
Json文件配置
1、创建一个json文件,文件名随意,比如config.json,设置“如果较新则复制”
2、NuGet安装Microsoft.Extensions.Configuration和Microsoft.Extensions.Configuration.Json
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设置为true,意思是文件不存在报错,这样写错了的话能够及时发现 reloadOnChange参数表示如果文件修改了,是否重新加载配置
绑定读取配置
1、可以绑定一个类,自动完成配置的读取
2、NuGet安装:Microsoft.Extensions.Configuration.Binder
Server server = configRoot.GetSection("proxy").Get<Server>()
2、选项方法读取
1、推荐使用选项方式读取,和DI结合更好,且更好利用“reloadonchange”机制
2、NuGet安装:Microsoft.Extensions.Option、Microsoft.Extensions.Configuration.Binder,当然也需要Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json。
3、读取配置的时候,DI要声明IOptions<s>、IOptionsMonitor<T>、IOptionsSnapshot<T>。IOptions<T>不会读取到新的值;和IOptionsMonitor相比,IOptionsSnapshot会在同一个范围内(比如ASP.NET Core一个请求)保持一致。建议用IOptionsSnapshot
演示
1、在读取配置的地方,用IOptionsSnapshot<T>注入。不要在构造函数里直接读取IOptionsSnapshot.value,而是到用到的地方在读取,否则就无法更新变化了
2、如下配置
services.AddOptions().Configure<DbSettings>(e => config.GetSection("DB").Bind(e)).Configure<SmtpSettings>(e => config.GetSection("Smtp").Bind(e));
services.AddTransient<Demo>();//不能用Singleton
试验改变
using (var sp = services.BuildServiceProvider())
{while (true){using (var scope = sp.CreateScope()){var spScope = scope.ServiceProvider;var demo = spScope.GetService<Demo>();demo.Test();}Console.WriteLine("可以改配置啦");Console.ReadKey();}
}
3、其他配置提供者
1、命令行方式配置
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中简化命令行传参的方法
2、扁平化配置
3、环境变量配置
4、其他配置源ini、xml、Azure、阿里云等配置服务
4、开发自己的配置提供者
5、开发数据库配置提供者
项目需求:网站用集群部署,如果用本地配置文件,每次修改都要挨个修改。有Apollo、Nacos等开源的配置中心以及云服务平台的配置服务,但是项目对于配置的要求没有非常复复杂,因此决定在关系数据库中保存配置
已经开源:https://github.com/yangzhongke/Zack.AnyDBConfigProvider 用的是扁平结构
6、多配置源的优先级
为什么要多配置源?
1、比如:某个网站需要自定义配置;程序员的同一台机器上,开发调式环境和测试环境用不同的配置
2、按照注册到ConfigurationBuilder的顺序,“后来者居上”,后注册的优先级高,如果配置名字重复,用后注册的值
7、保命的UserSecrets
1、.NET提供了user-secrets机制,user-secrets的配置不放到源码中
2、Nuget安装:Microsoft.Extensions.Configuration.UserSecrets
3、在vs项目上点击右键【管理用户机密】,编辑这个配置文件。看看这个文件在哪里。会自动在csproj中的UserSecretsId就是文件夹的名字
4、configBuilder.AddUserSecrets<Program>()
8、注意
1、不能泄露到源码中的配置放到user-secrets即可,不用都放
2、一般把user-secrets优先级放到普通json文件之后
3、如果开发人员电脑重装系统等原因造成本地的配置文件删除了,就需要重新配置
4、并不是生产中的加秘密,只适用于开发
.Net Core——配置系统相关推荐
- .NET Core采用的全新配置系统[5]: 聊聊默认支持的各种配置源[内存变量,环境变量和命令行参数]...
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命令行参 ...
- 杨中科.NET5视频教程更新了:DI、配置系统、Logging、EF Core等
我的.NET5视频教程又更新了一些内容了,包含依赖注入.配置系统.日志系统以及部分Entity Framework Core的内容.Entity Framework Core还没全讲完,会继续更新. ...
- linux内核配置系统浅析(转)
随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中.面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后, ...
- .Net Core 认证系统之基于Identity Server4 Token的JwtToken认证源码解析
介绍JwtToken认证之前,必须要掌握.Net Core认证系统的核心原理,如果你还不了解,请参考.Net Core 认证组件源码解析,且必须对jwt有基本的了解,如果不知道,请百度.最重要的是你还 ...
- Linux内核配置系统浅析
随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中.面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后, ...
- 深入理解Magento – 第一章 – Magento强大的配置系统
深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第一章 – Magento强大的配置系统 Magento的配置系统就像是Magento的心脏,支撑着Magento ...
- 【Centos7 NTP 服务器和客户端配置(含离线状态) 附赠手动配置系统时间】
Centos7 NTP 服务器和客户端配置(含离线状态)附赠手动配置系统时间 一.搭建NTP服务器 1.查看服务器.客户端操作系统版本 2.查看服务器是否安装ntp,系统默认安装ntpdate: 3. ...
- 配置系统在开机时启动虚拟机
2.2 配置系统在开机时启动虚拟机 可以通过两种方式配置系统在开机时自动启动虚拟机.从命令行可以自动启动系统.以下命令只需要一步即可设置,即添加一个到/etc/libvirt/qemu/autost ...
- ASP.NET Core配置Kestrel 网址Urls
ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls. ...
- Confluence 6 配置系统属性
2019独角兽企业重金招聘Python工程师标准>>> 在这个页面中描述 Confluence 启动时如何设置 Java 属性和其他选项. 请查看 How to fix out of ...
最新文章
- BZOJ4034 树上操作(树剖 线段树大模板)
- 获取现成的参考文献格式方法
- android设置通知在屏幕横幅显示,Android推送通知横幅未显示在某些设备中
- java13 InputStream,Reader
- hibernate框架之主键生成
- 读《爱的艺术》书评而问
- 台式机没有显示计算机图标,为什么台式电脑没有喇叭图标
- linux把root用户删了,linux root用户没法删除文件
- 快速了解 Kafka 生产者的使用和原理
- Mac系统访问Windows共享文件的详细步骤
- 区块链软件公司:你的区块链交易真的是匿名吗?
- html实现点击图片放大功能
- 网吧 电影服务器系统,XBS网吧电影系统10-26修改版(附教程)
- 阿里云产品之数据中台架构
- 某些网页页面偏左,什么原因?
- vs2017 自定义背景图片
- VUE2中provide 和 inject用法,以及怎么做响应式数据?
- 生产docker run 卡住没反应故障排查思路
- ansys matlab 温度场,ANSYS温度场分析步骤.pdf
- linux 下建立硬链接和软连接