扒一扒.NET Core的环境配置提供程序

  • 时间:2019-06-11 02:05 作者:雪雁 来源:雪雁 阅读:93
  • 扫一扫,手机访问
摘要:很久之前,在玩Docker的时候顺便扒了扒,最近,终于下定决心花了些时间整理并成文,希望能够给大家少量帮助。目录.NET Core中的配置ASP.NET Core中的配置扒一扒环境变量提供程序为什么是“__”?“__”如何变成了“:”?数据库连接字符串的配置的特殊规则最后前言.NET Core的配置

很久之前,在玩Docker的时候顺便扒了扒,最近,终于下定决心花了些时间整理并成文,希望能够给大家少量帮助。

目录

.NET Core中的配置

ASP.NET Core中的配置

扒一扒环境变量提供程序

为什么是“__”?

“__”如何变成了“:”?

数据库连接字符串的配置的特殊规则

最后


前言

.NET Core的配置提高程序非常强大和灵活,支持从各种配置源读取键值对:

·??????命令行参数

·??????目录文件(.json、xml、ini)

·??????环境变量

·??????内存中的对象

·??????Azure Key Vault

本篇我们侧重于扒一扒.NET Core的环境配置程序,理解其执行机制和特殊规则以及原理。由于通过环境变量来配置在很多场景都非常有用,尤其是在Docker环境之中。具体使用大家可以看看下面给出的截图和配置示例。


.NET Core中的配置

?在.NET Core中,我们通常这么玩:

1.?????增加依赖:

<PackageReferenceInclude="Microsoft.Extensions.Configuration"Version="2.2.0"?/>

????<PackageReferenceInclude="Microsoft.Extensions.Configuration.CommandLine"Version="2.2.0"?/>

<PackageReferenceInclude="Microsoft.Extensions.Configuration.EnvironmentVariables"Version="2.2.0"?/>

2.?????增加配置代码

privatestaticvoid Main(string[] args)

????????{

????????????var?config = newConfigurationBuilder()

????????????????????????//支持命令行参数

???????????????????????.AddCommandLine(args)

????????????????????????//支持环境变量

???????????????????????.AddEnvironmentVariables()

???????????????????????.Build();

????}


ASP.NET Core中的配置

由于在ASP.NET Core中,包“Microsoft.AspNetCore.App”已经包含了对“Microsoft.Extensions.Configuration”等包的依赖,因而在ASP.NET Core的应用程序中,通常我们会用以下代码来启用配置提供程序:

有时候我们也会使用下面代码来自己设置配置:

对于第一种写法,我们可以通过查看源码理解其具体机制:


扒一扒环境变量提供程序

接下来我们重点扒一扒环境变量提供程序,环境变量提供程序在容器这块应用极广,也极为方便,比方设置日志的输出级别:

docker run --nameaspnetcore_sample --rm -it -p 8000:80 -e 'Logging__LogLevel__Default=Debug' microsoft/dotnet-samples:aspnetapp

docker run --nameaspnetcore_sample1 --rm -it -p 8000:80 microsoft/dotnet-samples:aspnetapp

通过上面的比照,我们可以第一个命令通过设置了环境变量“Logging__LogLevel__Default=Debug”输出了调试日志。而且从上面代码来看,环境变量的配置会覆盖文件配置:

那么“Logging__LogLevel__Default”对应什么样的文件配置呢?如下所示:

{

?"Logging": {

???"LogLevel": {

?????"Default": "Warning"

???}

?},

?"AllowedHosts": "*"

}

如上所示,这个配置我们在appsettings.json中能够找到。不过很奇怪的是,为什么通过环境变量配置会变成“Logging__LogLevel__Default"呢(注意中间是两个下划线)?


为什么是“__”?

我们继续来扒一扒。继续看源码:

首先我们查看AddEnvironmentVariables的代码:

顺藤摸瓜找到了EnvironmentVariablesConfigurationSource:

最终扒开了EnvironmentVariablesConfigurationProvider的代码,找到了关键:

我们来挨个解析下重点。


“__”如何变成了“:”?

这个“__”在我们使用的时候,怎样变成“:”的呢?比方我们使用的时候都是这么玩的:

appConfiguration["RedisCache:ConnectionString"]

关键代码如下所示:

?private static string NormalizeKey(string key)

??????? {

??? ????????return key.Replace("__",ConfigurationPath.KeyDelimiter);

??????? }


数据库连接字符串的配置的特殊规则

在上图我们看到了少量特殊的判断,也就是扒出了数据库连接字符串的几个特殊名称前缀,这是怎样回事呢?这里我们补充说明一下:

针对连接字符串,.NET Core提供了少量特殊的解决规则。主要支持以下数据库:

当发现有以上前缀的环境变量时,会进行少量特殊解决:根据前缀在ConnectionStrings节增加对应的键值对,并且增加数据库提供程序的配置,如下所示:

假如说了这么多你还不太明白,简单的来讲,对于常用的数据库连接字符串,.NET环境变量提供程序提供了内置的简写进行配置,比方在Docker参数中我们可以这么配置:

-e ‘SQLCONNSTR_Default=Server= 192.168.1.11;Database=test; User ID=dev;Password=dev;’

如上所示,其中Default对应配置文件的示例如下图所示:

这样说能否明白了呢?如上所示,主要支持MySQL、Azure SQL 数据库和SQL Server。

最后

我们再来看看环境变量最终是如何变成配置路径,如以下代码:

至此,整个环境变量提供程序均已扒完,这次就说到这里。

.NET Core的配置非常灵活和强大,想理解更多,大家可以直接通过官网学习:

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#environment-variables-configuration-provider

?只是结合代码,能够更易于我们了解以及使用。

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】阿里云服务器Centos7搭建pptp VPN 一键安装脚本 亲测好用(2020-03-18 02:39)
【系统环境|服务器应用】在CentOS 7上如何安装Gogs 0.11.53(2020-02-10 10:14)
【系统环境|】淘码库,据消息称已被调查。淘码库源码网,已经无法访问!(2020-01-14 04:13)
【系统环境|服务器应用】Discuz隐藏后台admin.php网址修改路径(2019-12-16 16:48)
【系统环境|服务器应用】2020新网站如何让百度快速收录网站首页最新方法,亲测有用!免费(2019-12-16 16:46)
【系统环境|服务器应用】Discuz发布帖子时默认显示第一个主题分类的修改方法(2019-12-09 00:13)
【系统环境|软件环境】Android | App内存优化 之 内存泄漏 要点概述 以及 处理实战(2019-12-04 14:27)
【系统环境|软件环境】MySQL InnoDB 事务(2019-12-04 14:26)
【系统环境|软件环境】vue-router(单页面应用控制中心)常见用法(2019-12-04 14:26)
【系统环境|软件环境】Linux中的Kill命令(2019-12-04 14:26)
手机二维码手机访问领取大礼包
返回顶部