1.配置文件的相关闲话

  Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级

命令行>环境变量>自我订制的配置(AddUserSecrets)>和当前环境相匹配的appsettings.json中的配置>大于appsettings.json中的配置

  关于AddUserSecrets是什么这里简单一言以蔽之:每个开发人员有自己特性的配置数据,这些配置信息仅仅属于个人,不能提交给团队成员,

  但是又不想不团队共有的配置所影响. 剩下的自行去了解,关键是上面的优先级

  和当前环境相匹配的appsettings.json如appsettings.Development.json

2.日志配置的问题

系统默认采用Microsoft.Extensions.Logging系列套餐作为默认的日志组件,且采用配置文件中的Logging节点作为日志的默认配置参数依据。如下图所示:

日志的优先等级如下(从上到下依次递增)

    public enum LogLevel
{
// 含有最详细的日志数据,其中可能含有程序的一些敏感数据,该选项默认是被禁用的,且生产环境中绝对不要开启
// (太多,太敏感),之所以默认禁用在于appsettings.json中最低级别是Information
Trace = 0,
//调试用的一些数据
Debug = 1,
// 用于跟踪程序通常的流程数据,这些日志是一些长期的数据。
Information = 2,
// 需要引起重视的日志数据,不会导致程序崩溃
Warning = 3,
//发生了错误,但不会导致程序大范围崩溃
Error = 4,
// 严重且致命的错误
Critical = 5,
// 不是用来记录日志的. 通常用于设置默认值
None = 6
}  

3.配置文件的读取

 1)ASP.NET Core的Host采用appsettings.json作为配置文件,具体的值是多少受优先级的影响(看第一段)

 2)Startup类中Host自动通过构造注入的方式提供了Configuration的值,Configuration读取方式介绍如下

ASP.NET Core中默认采用了Microsoft.Extensions.Configuration.Json作为配置解析器(publish一下就看到了里面有它)

{
"Id": "123",
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"UserList": [
{
"Name": "Name1"
},
{
"Name": "Name2"
},
{
"Name": "Name3"
}
]
}

3.通过Key进行读取

Configuration["Id"]; //  123
Configuration["Logging:IncludeScopes"]; // false
Configuration["Logging:LogLevel:Default"]; // Debug
Configuration["UserList:0:Name"]; // Name1

上面这些值都是string类型的,我们可以通过GetValue来获取指定类型的值

如下

Configuration.GetValue<int>("Id"); // int类型的123
Configuration.GetValue<bool>("Logging:IncludeScopes"); // bool 类型 false
Configuration.GetValue<string>("Logging:LogLevel:Default"); // string 类型 Debug
Configuration.GetValue<string>("UserList:0:Name"); // string 类型 Name1

4.通过POCO(纯C#对象)类来获取配置信息(这里以Get方法为例)

public class Poco
{
public int Id { get; set; }
public LoggingPoco Logging { get; set; }
public List<User> UserList { get; set; }
public class User
{
public string Name { get; set; }
}
}
public class LoggingPoco
{
public bool IncludeScopes { get; set; }
public LogLevelPoco LogLevel { get; set; }
}
public class LogLevelPoco
{
public string Default { get; set; }
public string System { get; set; }
public string Microsoft { get; set; }
}
var detailLogging = Configuration.GetSection("Logging").Get<LoggingPoco>();

  

获取整个配置文件的配置信息

var allConfig = Configuration.Get<Poco>();

获取指定节点下的配置内容

var logging = Configuration.GetSection("Logging").Get<LoggingPoco>();

说说优先级最高的配置(命令行方式)

前文所述,命令行具有优先级最高的配置权力,命令行传入A的值的方式:

//core特有的传入方式,没有引号就会因空格截断

dotnet  app.dll  /A="Value in CMD"  

//传统的方式,没有引号就会因空格截断
dotnet app.dll --A "Value in CMD"
dotnet  app.dll  A="Value in CMD"  

环境变量的传值方式

环境变量的等级仅次于命令行,另外windows当前用户的环境变量有限等级高于系统环境变量,windows环境变量可能重启后才能生效;

主要的应用场景在于docker等

内存性配置方式

主要用于加密保护一些敏感配置数据.

《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项的更多相关文章

  1. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  2. 《ASP.NET Core 高性能系列》关于.NET Core的部署方式

    概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET ...

  3. 《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)

    一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { ...

  4. Asp.net Core Startup Class中是如何获取配置信息的

    默认的网站构建方式 VS2015新建asp.net core项目,项目建立完成后,有两个文件,Program.cs和Startup.cs. public class Program { public ...

  5. 【.Net Core 学习系列】-- EF Core 实践(Code First)

    一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project -->   ...

  6. 【.Net Core 学习系列】-- EF Core实践(DB First)

    一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ...

  7. 《ASP.NET Core 高性能系列》静态文件中间件

    一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...

  8. 《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

    一.概述 程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个有设计点问题,因为.NET Core 非Web怎么处理?),然后交由IWebHostEnvir ...

  9. 《ASP.NET Core 高性能系列》关于性能的闲聊

    一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二. ...

随机推荐

  1. jsp页面中如何让一个输入框内的提示文字是灰色而输入的文字是黑色

    <input name="name" type="text"  value="提示的文字" size="30" o ...

  2. POJ - 3177 Redundant Paths 说说连通分量吧

    ----我想说说双联通分量还有割点和桥 1.割点(一个点,如果没有这一个点,图就会变得不连通) 2.桥(一条边,断开这条边就会让图不连通) 3.点双连通(没割点的图) 4.边双连通(没桥的图) 5.割 ...

  3. $Poj2054\ Color\ a\ Tree\ $ 贪心

    $poj$ $Description$ 一颗树有 $n$ 个节点,这些节点被标号为:$1,2,3…n,$每个节点 $i$ 都有一个权值 $A[i]$. 现在要把这棵树的节点全部染色,染色的规则是: 根 ...

  4. Windows远程桌面管理--功能强大的远程批量管理工具【转】

    曾经,我想着要是有一款绿色小巧,功能实用的远程桌面管理工具,其界面简洁,操作便捷,能够同时远程操作多台服务器,并且多台服务器间可以自由切换,适用于网站管理人员使用的工具该有多好,苍天不负有心人,终于出 ...

  5. VisitorPattern(访问者模式)-----Java/.Net

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...

  6. MediatorPattern(中介者模式)-----Java/.Net

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式.

  7. appium获取toast和操作webview实例

    从testerhome上看到很多测试同学分享了toast的获取方式,其中大部分是java版本的,但也有个python版本的:Appium1.7.2 android toast 消息测试 Appium获 ...

  8. U盘中了蠕虫病毒,文件夹都变成exe了,怎么办?

    昨天做实验,用U盘拷了实验室的文件,然后就中了病毒了(无奈),U盘里的文件全都变成了exe.有点慌张,我的U盘里存了很多课程资料.然而,我懒得下载杀毒软件.参考这位博主的做法,我成功的找回了我隐藏的文 ...

  9. 小米6X谷歌套件

    话不多说真机测试完美适配,安卓万物基于谷歌链接如下(个别MIUI版本不同谷歌商店会报错,如遇到请留言我会第一时间回复解决) 链接:https://pan.baidu.com/s/1b2Cs0u9J2b ...

  10. 端口扫描器--利用python的nmap模块

    安装nmap模块挺麻烦的,搞了半天 不仅要安装pip install nmap 还要sudo apt install nmap 给出代码,没有设多线程,有点慢,注意端口的类型转换,搞了很久 #!/us ...