Net Core中的配置文件介绍

1 简单回顾.Net Framework配置文件

  .Net Core中的配置文件操作较.Net Framework有了很大的改动。介绍.Net Core中配置文件操作前,我们先回顾下.Net Framework中配置文件的操作。在.Net Framework中应用程序的配置文件只支持XML形式,应用程序的配置文件一般是App.Config或者Web.Config,添加配置文件最常用的方法是:在appSettings和ConnectionString节点下添加子节点,简单看一个栗子

  配置文件下添加子节点:

<appSettings>
<add key="mykey" value="myvalue"/>
</appSettings>
<connectionStrings>
<add name="connstr" connectionString="server=.;uid=sa;pwd=xxxx;database=mydbname"/>
</connectionStrings>

  获取配置文件中的值:

//MVC中读取配置文件
ViewBag.value = WebConfigurationManager.AppSettings["mykey"];
ViewBag.connstr = WebConfigurationManager.ConnectionStrings["connstr"].ConnectionString; //Webapi,Console,Winform应用读取配置文件
string s1 = ConfigurationManager.AppSettings["mykey"];
string s2 = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

  .Net Core的配置文件相比于.Net Framework最大的特点是其不仅仅支持XML格式的配置文件,还支持Json,Ini,memory,command,env(环境变量)。首先看一个Json配置文件的栗子。

2 Json配置文件的操作

  这里采用一个控制台项目作为栗子,Asp.NET Core中配置文件的操作基本一致。首先添加两个包

Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json

  添加配置文件,文件名可以任意指定,这里使用appsettings.json,设置属性为【始终复制】

{
"isRight": true,
"myArray": [ , , , ],
"myJson": {
"key1": "json中的value1",
"key2": "json中的value2"
}
}

  读取配置文件中数据,代码如下:

    class Program
{
static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
//设置配置文件基本路径
.SetBasePath(Environment.CurrentDirectory)
//添加json配置。参数:optional配置文件是否为可选的,reloadOnChange是否热加载
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
Console.WriteLine(configuration["isRight"]);
Console.WriteLine(configuration["myArray:0"]);//输出myArray[0], 【:】表示下一级节点
Console.WriteLine(configuration["myJson:key1"]);//输出myJson->key1 【:】表示下一级节点
Console.ReadKey();
}
}
在.Net Core中使用ConfigurationBuilder对象的 SetBasePath(strPath) 设置配置文件的基本路径, AddJsonFile("filePath") 方法添加配置文件,Build方法创建配置对象。

运行结果为

3 其他类型的配置文件

  上边提到.Net Core的配置文件支持多种类型,Configuration的数据源可以来自Json,XML,环境变量,Ini,Memory等,下边我们看一下怎么去操作其他类型配置文件。

首先添加几个Package

//xml配置文件
Install-Package Microsoft.Extensions.Configuration.Xml
//ini配置文件
Install-Package Microsoft.Extensions.Configuration.Ini
//环境变量
Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables
//支持强类型读取,扩展了IConfiguration的方法
Install-Package Microsoft.Extensions.Configuration.Binder

添加XML配置文件,文件名为appsettings.xml,属性设置为【始终复制】

<appsettings>
<mykey>myvalue</mykey>
<mysql>
<server>192.168.11.11</server>
<port>3306</port>
</mysql>
</appsettings>

一个简单的栗子

    class Program
{
static void Main(string[] args)
{
//memory配置数据
var initData = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("initKey1", "初始配置数据1"),
new KeyValuePair<string, string>("initKey2", "初始配置数据2"),
}; IConfiguration configuration = new ConfigurationBuilder()
//设置根目录
.SetBasePath(Environment.CurrentDirectory)
//添加json配置。参数:optional配置文件是否为可选的,reloadOnChange是否热加载
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
//添加xml文件配置
.AddXmlFile("appsettings.xml")
//添加memory中的配置
.AddInMemoryCollection(initData)
//将环境变量添加到配置
.AddEnvironmentVariables()
.Build(); //方式1:弱类型读取
string str1 = configuration["initKey1"];
string str2 = configuration["isRight"];
string str3 = configuration["myArray:0"];
string str4 = configuration["myJson:key1"];
//我电脑上配置的NPM_HOME环境变量
string str5 = configuration["NPM_HOME"];
string str6 = configuration["mysql:server"];
Console.WriteLine($"{str1}--{str2}--{str3}--{str4}--{str5}--{str6}"); //方式2:强类型
//Microsoft.Extensions.Configuration.Binder扩展了Configuration的方法
string strA = configuration.GetValue<string>("initKey1");
bool boolB = configuration.GetValue<bool>("isRight");
int intC = configuration.GetValue<int>("myArray:0");
string strD = configuration.GetValue<string>("myJson:key1");
//我电脑上配置的NPM_HOME环境变量
string strE = configuration.GetValue<string>("NPM_HOME");
string strF = configuration.GetValue<string>("mysql:server");
Console.WriteLine($"{strA}--{boolB}--{intC}--{strD}--{strE}--{strF}");
Console.ReadKey();
}
}

运行结果

  我们看一下Configuration对象是怎么存储配置的,每一个配置源的数据都单独存放在一个Provider中,存储的方式如下图所示,无论是json/xml还是其他类型的配置源,配置最终都以Key-Value的形式存储在所对应的Provider中。

一点重要的补充:如果多个配置文件中都配置了同一个Key值,那么以后面添加的准。如先添加XML配置文件,然后添加Json配置文件,Json配置文件会覆盖Xml配置文件中重复的配置。

4 通过对象方式读取配置文件

  通过上边的介绍我们已经知道怎么去添加和读取配置文件,但是读取时都是用Key来获取Configuraion对象中的值,如果能以对象的形式(如:configuration.mykey形式)来读取configuration就会更方便了。 Microsoft.Extensions.Configuration.Binder 包为我们提供了这种方法。以Json配置文件为例,配置文件appsettings的内容如下:

{
"isRight": true,
"myArray": [ , , , ],
"myJson": {
"key1": "json中的value1",
"key2": "json中的value2"
}
}

生成configuration绑定的类,可以自己写一个绑定类。(一个小技巧:复制appsettings中的内容,【编辑】-【选择性粘贴】-【将Json粘贴为类】)

效果如下:

具体操作的代码如下

    class Program
{
static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
//设置根目录
.SetBasePath(Environment.CurrentDirectory)
//添加json配置。参数:optional配置文件是否为可选的,reloadOnChange是否热加载
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build(); //普通方式读取
Console.WriteLine("----------------普通方式读取");
Console.WriteLine($"{configuration["isRight"]}--{configuration["myArray:"]}--{configuration["myJson:key1"]}"); //对象方式读取
Rootobject cfgObj = configuration.Get<Rootobject>();
//也可以用下边的方式绑定,效果一样:
//Rootobject cfgObj = new Rootobject();
//configuration.Bind(cfgObj);
Console.WriteLine("----------------对象方式读取");
Console.WriteLine($"{cfgObj.isRight}--{cfgObj.myArray[0]}--{cfgObj.myJson.key1}");
Console.ReadKey();
}
} //绑定Configuration对象的类
public class Rootobject
{
public bool isRight { get; set; }
public int[] myArray { get; set; }
public Myjson myJson { get; set; }
} public class Myjson
{
public string key1 { get; set; }
public string key2 { get; set; }
}

  通过对象绑定读配置文件有两个优点:①读取配置文件时为强类型读取(如configuration.isRight为bool类型,而不是统一的string类型);②具有代码提示功能

.Net Core配置文件介绍的更多相关文章

  1. 4 Redis 配置文件介绍

    2016-12-22 14:28:39 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...

  2. .NET Core配置文件加载与DI注入配置数据

    .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...

  3. Apache源码包安装和子配置文件介绍--update.2014-12-5

    安装apache: 官网:http://httpd.apache.org/download.cgi#apache24 1.wget http://mirror.bit.edu.cn/apache//h ...

  4. Linux core 文件介绍

    Linux core 文件介绍 http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.html 1. core文件的简单介绍在一个 ...

  5. net core体系-web应用程序-4net core2.0大白话带你入门-6asp.net core配置文件

    asp.net core配置文件   读取配置文件 asp.net core使用appsettings.json代替传统.net framework的web.config中的<appSettin ...

  6. Logstash配置文件介绍

    Logstash配置文件介绍 Logstash配置文件有两种,分别是pipeline配置文件和setting配置文件. Pipeline配置文件主要定义logstash使用的插件以及每个插件的设置,定 ...

  7. [转].NET Core配置文件加载与DI注入配置数据

    本文转自:http://www.cnblogs.com/skig/p/6079187.html .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config ...

  8. [01]从零开始学 ASP.NET Core 与 EntityFramework Core 课程介绍

    从零开始学 ASP.NET Core 与 EntityFramework Core 课程介绍 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新 ...

  9. Nginx服务配置文件介绍

    LNMP架构应用实战——Nginx服务配置文件介绍 nginx的配置文件比较简单,但功能相当强大,可以自由灵活的进行相关配置,因此,还是了解下其配置文件的一此信息 1.Nginx服务目录结构介绍 安装 ...

随机推荐

  1. ConchAPI | 更智能的API监控,提升团队效率

    “昨天调好的API,怎么又挂了,竟然没有人发现?” “喂喂喂,你的API挂了,无法调用成功?哪里出问题了?” “这段时间的API数量越来越多了,有谁能好好理清下?” 现在服务端技术越来越讲究微服务化, ...

  2. Docker容器镜像删除

    好吧,本来认为删除镜像是一件很容易的事情,但刚开始上手,还是有点百思不得其解.删着删着,发现果然很容易.分享下本人的心得: 分两种情况:那么要删除镜像,首先得删除容器,删除容器时,确保容器已停止运行: ...

  3. Java基础系列--02_运算符和程序的语句

    运算符: (1)算术运算符: +,-,*,/,%,++,--(加.减.乘.除.取余.自增,自减) ++和--的注意事项: a:他们的作用是自增或者自减 b:使用 1.单独使用 放在操作数据的前面和后面 ...

  4. 一脸懵逼学习Storm---(一个开源的分布式实时计算系统)

    Storm的官方网址:http://storm.apache.org/index.html 1:什么是Storm? Storm是一个开源的分布式实时计算系统,可以简单.可靠的处理大量的数据流.被称作“ ...

  5. SFP光模块与SFP+、XFP、QSFP、GBIC、BIDI的区别

    SFP.SFP+.XFP.QSFP.GBIC和BIDI等不同封装类型光模块不断推陈出新,我们就以市场上比较常见的为主,来谈谈它与其他类似光模块的区别. SFP光模块 SFP光模块又称⼩封装可插拔光模块 ...

  6. Mybatis中接口和对应的mapper文件命名为什么需要一样?

    背景: 自己对于Mybatis现阶段只处于会用的阶段,有些问题,自己还是想深入的了解一下.就拿Mybatis的接口文件和mapper文件命名需要一致来开始. 解决: 当我们将接口和mapper文件放在 ...

  7. STL—之迭代器,文中推荐的博客很给力

    在此,不再赘述迭代器本身的意义和作用,本质上,迭代器就是一种泛型指针.但是不同的容器对应的迭代器是不同的,我们使用迭代器的时候,需要认识到: 知道迭代器的类型是一件很重要的事情. 在此,给出一个描述迭 ...

  8. MySQL官网示例数据库emploees分析使用

    1.下载与安装 下载地址:https://github.com/datacharmer/test_db 安装博客:https://blog.csdn.net/appleyuchi/article/de ...

  9. linux基本命令2

    目录: 目录: /bin:可执行文件 /sbin:系统文件 /dev:设备文件 命令: mkdir test cd test touch 11.txt vi 11.txt cat 11.txt cp ...

  10. 【MySQL 读书笔记】全局锁 | 表锁 | 行锁

    全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只 ...