[Asp.net 5] Configuration-新一代的配置文件(ConfigurationSource的多种实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件
在前面我们介绍了,系统中用IConfigurationSource表示不同配置文件的来源,起到读取、设置、加载配置文件的作用。而虚拟类ConfigurationSource继承接口IConfigurationSource,其他类又由ConfigurationSource派生(当然我们也可以写继承自接口IConfigurationSource类,但是没什么必要)。下面是实现不同配置方式的工程:
下面我们主要以测试用例的方式讲解Json与XMl配置文件的源码以及实用方式:
Microsoft.Framework.Configuration.Json
Json的配置文件:在实现的过程中使用Newtonsoft.Json的NuGet程序包,这是非常有名的json操作组件,如果单独涉及到.net的Json操作,推荐使用该组件。
- Json包含数组的使用:
public void ArrayOfObjects()
{
var json = @"{
'ip': [
{
'address': '1.2.3.4',
'hidden': false
},
{
'address': '5.6.7.8',
'hidden': true
}
]
}"; var jsonConfigSource = new JsonConfigurationSource(TestStreamHelpers.ArbitraryFilePath);
jsonConfigSource.Load(TestStreamHelpers.StringToStream(json)); Assert.Equal("1.2.3.4", jsonConfigSource.Get("ip:0:address"));
Assert.Equal("False", jsonConfigSource.Get("ip:0:hidden"));
Assert.Equal("5.6.7.8", jsonConfigSource.Get("ip:1:address"));
Assert.Equal("True", jsonConfigSource.Get("ip:1:hidden"));
}
ArrayOfObjects
- json多配置文件的使用:
public void ExplicitArrayReplacement()
{
var json1 = @"{
'ip': [
'1.2.3.4',
'7.8.9.10',
'11.12.13.14'
]
}"; var json2 = @"{
'ip': {
'1': '15.16.17.18'
}
}"; var jsonConfigSource1 = new JsonConfigurationSource(TestStreamHelpers.ArbitraryFilePath);
jsonConfigSource1.Load(TestStreamHelpers.StringToStream(json1)); var jsonConfigSource2 = new JsonConfigurationSource(TestStreamHelpers.ArbitraryFilePath);
jsonConfigSource2.Load(TestStreamHelpers.StringToStream(json2)); var builder = new ConfigurationBuilder();
builder.Add(jsonConfigSource1, load: false);
builder.Add(jsonConfigSource2, load: false);
var config = builder.Build(); Assert.Equal(, config.GetConfigurationSections("ip").Count());
Assert.Equal("1.2.3.4", config.Get("ip:0"));
Assert.Equal("15.16.17.18", config.Get("ip:1"));
Assert.Equal("11.12.13.14", config.Get("ip:2"));
}
ExplicitArrayReplacement
- 配置文件的排序后顺序(获取所有子key的时候会对key值进行排序)
public void PropertiesAreSortedByNumberOnlyFirst()
{
var json = @"{
'setting': {
'hello': 'a',
'bob': 'b',
'42': 'c',
'4':'d',
'10': 'e',
'1text': 'f',
}
}"; var jsonConfigSource = new JsonConfigurationSource(TestStreamHelpers.ArbitraryFilePath);
jsonConfigSource.Load(TestStreamHelpers.StringToStream(json)); var builder = new ConfigurationBuilder();
builder.Add(jsonConfigSource, load: false);
var config = builder.Build(); var configurationSection = config.GetConfigurationSection("setting");
var indexConfigurationSections = configurationSection.GetConfigurationSections().ToArray(); Assert.Equal(, indexConfigurationSections.Count());
Assert.Equal("", indexConfigurationSections[].Key);
Assert.Equal("", indexConfigurationSections[].Key);
Assert.Equal("", indexConfigurationSections[].Key);
Assert.Equal("1text", indexConfigurationSections[].Key);
Assert.Equal("bob", indexConfigurationSections[].Key);
Assert.Equal("hello", indexConfigurationSections[].Key);
}
PropertiesAreSortedByNumberOnlyFirst
Microsoft.Framework.Configuration.Xml
xml配置文件,在日常中用的也是比较多的,传统的配置文件就是xml的。[该处实现是支持内容加密的,具体不了解,略]
下面是xml文件的常规用法:
public void SupportAndIgnoreXMLDeclaration()
{
var xml =
@"<?xml version='1.0' encoding='UTF-8'?>
<settings>
<Data>
<DefaultConnection>
<ConnectionString>TestConnectionString</ConnectionString>
<Provider>SqlClient</Provider>
</DefaultConnection>
<Inventory>
<ConnectionString>AnotherTestConnectionString</ConnectionString>
<Provider>MySql</Provider>
</Inventory>
</Data>
</settings>";
var xmlConfigSrc = new XmlConfigurationSource(ArbitraryFilePath); xmlConfigSrc.Load(TestStreamHelpers.StringToStream(xml)); Assert.Equal("TestConnectionString", xmlConfigSrc.Get("Data:DefaultConnection:ConnectionString"));
Assert.Equal("SqlClient", xmlConfigSrc.Get("Data:DefaultConnection:Provider"));
Assert.Equal("AnotherTestConnectionString", xmlConfigSrc.Get("Data:Inventory:ConnectionString"));
Assert.Equal("MySql", xmlConfigSrc.Get("Data:Inventory:Provider"));
}
XMLConfigurationSource
[Asp.net 5] Configuration-新一代的配置文件(ConfigurationSource的多种实现)的更多相关文章
- C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作,无法为请求的 Configuration 对象创建配置文件。
应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...
- [Asp.net 5] Configuration-新一代的配置文件
微软新一代asp.net(vnext),也叫asp.net 5,开源代码都放在网址https://github.com/aspnet下. 本文介绍的是Configuration工程,下载路径为http ...
- [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 本系列文章讲的是asp.net 5(Asp.net VNext)中的配置文件部分,工程下载地址为:https: ...
- [Asp.net 5] Configuration-新一代的配置文件(神奇的Binder)
关于配置文件的目录:[Asp.net 5] Configuration-新一代的配置文件 之前看过MVC4.0的源码,里面就有Binder.作用是将前台页面传递过来的键值对/字典表绑定到特定的对象.此 ...
- asp.net在配置文件里设置多种编码方式的研究
我们在做asp.net的程序时,在根目录下肯定会有一个web.config的文件, 有点开发经验的可能都知道,它是配置程序的全局信息的地方, 当然了,也可以在这里做更多的事情,下面我们来研究一下 ,如 ...
- Asp.net Core 和类库读取配置文件信息
Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...
- 无法为请求的 Configuration 对象创建配置文件 错误原因
Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 无法为请求的 Configura ...
- [译]ASP.NET 5 Configuration
原文:https://docs.asp.net/en/latest/fundamentals/configuration.html ASP.NET 5支持多种配置选项. 应用的配置文件可以是JSON, ...
- ASP.NET网站开发中的配置文件
来源:微信公众号CodeL 1.配置文件层次分类 Machine.config: 对.netframework整体的配置 web.config(framework目录下): 对所有项目所公有的应用 ...
随机推荐
- [.net 面向对象编程基础] (8) 基础中的基础——修饰符
[.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...
- 走进AngularJs(七) 过滤器(filter)
过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...
- PosePlus的第一次突破
动作问题一定要解决 PosePlus是解决这个问题的库 (之前叫做CleanData.Ani,后来我想过,之前的设计各个库之间的依赖太重了) 现在把他们之间的依赖剥开. PosePlus解决几个问 ...
- memcache(三)内存管理
memcached(三)内存管理 memcached使用预申请的方式来管理内存的分配,从而避免内存碎片化的问题.如果采用mallo和free来动态的申请和销毁内存,必然会产生大量的内存碎片. 基本知识 ...
- [体感游戏] 1、MPU6050数据采集传输与可视化
最近在研究体感游戏,到目前为止实现了基于51单片机的MPU6050数据采集.利用蓝牙模块将数据传输到上位机,并利用C#自制串口数据高速采集软件,并且将数据通过自制的折线图绘制模块可视化地展示出来等功能 ...
- Spring-Context之三:使用XML和Groovy DSL配置Bean
在第一讲中显示了如何使用注解配置bean,其实这是Spring3引进的特性,Spring2使用的是XML的方式来配置Bean,那时候漫天的XML文件使得Spring有着配置地狱的称号.Spring也一 ...
- 三天学会HTML5 ——多媒体元素的使用
目录 1. HTML5 Media-Video 2. HTML5 Media-Audio 3. 拖拽操作 4. 获取位置信息 5. 使用Google 地图获取位置信息 多媒体是互联网中的最重要的一部分 ...
- MooseFS学习-概述
MFS(MooseFS)是一个容错的.网络分布式文件系统,是GFS的开源实现.它把数据分散在多个物理机上,对外展现为一个整体资源. 支持的功能 Unix的通用文件系统功能:目录树:记录POSIX文件属 ...
- 小议map排序问题
map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢? 经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的, 非大小排 ...
- JS实现无限分页加载——原理图解
由于网页的执行都是单线程的,在JS执行的过程中,页面会呈现阻塞状态.因此,如果JS处理的数据量过大,过程复杂,可能会造成页面的卡顿.传统的数据展现都以分页的形式,但是分页的效果并不好,需要用户手动点击 ...