ASP.NET Core的配置(6):多样性的配置来源[中篇]
作者:网络转载 发布时间:[ 2016/6/23 14:37:43 ] 推荐标签:配置管理 ASP.NET
我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguationProvider以及针对INI文件的IniConfiguationProvider。对于这三种文件类型(JSON、XML和INI)来说,JSON能够采用简单直观的格式表示具有不同结构的数据,所以它是作为配置好的选择。
目录
MemoryConfigurationProvider
EnvironmentVariablesConfigurationProvider
CommandLineConfigurationProvider
JsonConfigurationProvider
XmlConfiguationProvider
IniConfigurationProvider
自定义ConfigurationProvider
一、JsonConfiguationProvider
我们可以将配置定义在一个JSON文件中,终利用JsonConfiguationProvider加载该文件并将以JSON格式表示的配置原始数据转换成配置字典供配置模型使用。JsonConfiguationProvider定义在“Microsoft.Extensions.Configuration.Json”程序集下,它同样也是所在NuGet包的名称。
1: public class JsonConfigurationProvider : ConfigurationProvider
2: {
3: public JsonConfigurationProvider(string path);
4: public JsonConfigurationProvider(string path, bool optional);
5:
6: public override void Load();
7:
8: public string Path { get; }
9: public bool Optional { get; }
10: }
如上面的代码片断所示,JsonConfiguationProvider具有两个只读属性(Path和Optional),前者代表承载原始配置数据的JSON文件所在路径,后者表明当前的JsonConfiguationProvider是否是可选的ConfigurationProvider,其默认值为False。如果Optional为True,在创建JsonConfiguationProvider是指定一个不存在的文件将不会抛出异常,在这种情况下它会创建一个空的字典对象作为配置源。
在使用JsonConfiguationProvider的时候,我们可以直接创建这个对象并调用Add方法将其添加到指定的ConfigurationBuilder之中。我们可以直接调用ConfigurationBuilder对象具有如下定义的两个扩展方法AddJsonFile达到相同的目的。
1: public static class JsonConfigurationExtensions
2: {
3: public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder configurationBuilder, string path);
4: public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder configurationBuilder, string path, bool optional);
5: }
当使用JSON文件来定义配置的时候,我们会发现不论对于何种数据结构(复杂对象、集合户者字典),我们都能通过JSON格式以一种简单而自然的方式来定义它们。同样以前面定义的Profile类型为例,我们可以利用如下所示的三个JSON文件分别定义一个完整的Profile对象、一个Profile对象的集合以及一个Key和Value类型分别为字符串和Profile的字典。
Profile.json
1: {
2: "profile": {
3: "gender" : "Male",
4: "age" : "18",
5: "contactInfo": {
6: "email" : "foobar@outlook.com",
7: "phoneNo" : "123456789"
8: }
9: }
10: }
ProfileCollection.json
1: {
2: "profiles": [
3: {
4: "gender" : "Male",
5: "age" : "18",
6: "contactInfo": {
7: "email" : "foo@outlook.com",
8: "phoneNo" : "123"
9: }
10: },
11: {
12: "gender" : "Male",
13: "age" : "25",
14: "contactInfo": {
15: "email" : "bar@outlook.com",
16: "phoneNo" : "456"
17: }
18: },
19: {
20: "gender" : "Female",
21: "age" : "40",
22: "contactInfo": {
23: "email" : "baz@outlook.com",
24: "phoneNo" : "789"
25: }
26: }
27: ]
28: }
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11