[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(3, 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(6, indexConfigurationSections.Count());
            Assert.Equal("4", indexConfigurationSections[0].Key);
            Assert.Equal("10", indexConfigurationSections[1].Key);
            Assert.Equal("42", indexConfigurationSections[2].Key);
            Assert.Equal("1text", indexConfigurationSections[3].Key);
            Assert.Equal("bob", indexConfigurationSections[4].Key);
            Assert.Equal("hello", indexConfigurationSections[5].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

时间: 2024-11-09 17:29:45

[Asp.net 5] Configuration-新一代的配置文件(ConfigurationSource的多种实现)的相关文章

[Asp.net 5] Configuration-新一代的配置文件

微软新一代asp.net(vnext),也叫asp.net 5,开源代码都放在网址https://github.com/aspnet下. 本文介绍的是Configuration工程,下载路径为https://github.com/aspnet/Configuration. 新一代的配置文件支持json形式.xml形式.甚至支持命令行.配置文件.ini文件,以及一切自己想扩展的格式:并且可以来源不止一个或者一类,可以选择使用json和xml类的配置文件一起使用:更重要的是,新的配置文件架构,非常清

asp.net在配置文件里设置多种编码方式的研究

我们在做asp.net的程序时,在根目录下肯定会有一个web.config的文件, 有点开发经验的可能都知道,它是配置程序的全局信息的地方, 当然了,也可以在这里做更多的事情,下面我们来研究一下 ,如何在一个配置文件里设置多种编码方式, 在项目第一次生成时,项目都会生成一个 web.config文件, web.config文件是一个xml文件,刚生成的web.config文件里,有这样一个节点: <system.web> 您可以在这个节点下设置<globalization request

ASP.NET 5 Configuration

原文:https://docs.asp.net/en/latest/fundamentals/configuration.html ASP.NET 5支持多种配置选项. 应用的配置文件可以是JSON,XML,INI格式,也可以是来自系统环境变量.而且你还可以写自己的自定义configuration provider. 下载本文示例代码 获取设置configuration ASP.NET 5的重构了之前依赖于System.Configuration和xml格式的配置文件(如web.config).

利用XML序列化和Asp.Net Web缓存实现站点配置文件

我们经常会遇到这样的场景: 今天来了个业务,需要加一个字段,但是考虑的以后可能有变动,需要配成“活”的. 一般最初的做法就是加一个配置到Web.Config文件的AppSettings中去.但是这样有一个问题,那就是改一下配置节点,AppDomain就需要重启,很是不爽. 变通一点的会搞出一个xml文件,利用序列化去动态的读取.但是,哥!每次都读文件不觉得太耗IO吗?尤其是使用频率高话? 下面上代码吧,懒的废话了,关键地方都注释了,也不是什么高深的技术: 先来配置文件(注意Config路径要自己

asp.net中为什么修改了配置文件后我们不需要重启IIS

本文转载:http://blog.itpub.net/12639172/viewspace-659819/ 大家知道,asp.net中,如果我们修改了配置文件只要把它保存之后,就会立刻反应到程序中, 并不需要我们重启IIS.甚至我们可以在不停止IIS的情况下,直接替换应用程序下的文件,包括我们 编译好的dll文件等,你需要做的只是替换你变换了的文件而已.那么.net是怎么做到的呢? 这要归功于.net的应用程序域机制,应用程序域是比进程小的程序元单位,也就是说一个 进程中可以包含多个应用程序域.

ASP.NET、WinForm、C# - 配置文件信息读取 [ Web.config || Appconfig ]

<configuration> <appSettings> <add key="name" value="HF_Ultrastrong"/> </appSettings> <connectionStrings> <add name="ConString" connectionString="server = ***; DATABASE = DB_News; integra

Accessing the ASP.NET Web Configuration Tool in Visual Studio 2013

Open the Command Prompt (not as administrator) Navigate to the folder where IIS Express is installed on your machine. In the command line spin up a IISExpress site with the following prompt: "iisexpress.exe /path: C:\Windows\Microsoft.NET\Framework\v

Mybatis之Configuration初始化(配置文件.xml的解析)

源码解读第一步我觉着应该从Mybatis如何解析配置文件开始. 1.先不看跟Spring集成如何解析,先看从SqlSessionFactoryBuilder如果解析的. 1 String resouce = "conf.xml"; 2 InputStream is = Resources.getResourceAsStream(resouce); 3 4 // 构建sqlSession工厂 5 SqlSessionFactory sqlSessionFactory = new SqlS

ASP.NET Core读取appsettings.json配置文件信息

1.在配置文件appsettings.json里新增AppSettings节点 { "Logging": { "LogLevel": { "Default": "Warning" } }, "AppSettings": { "HttpUrl": "http://www.ehongcn.com", "Copyright": "山南远宏科技有