我们知道,ConfigurationProvider提供将数据源转换为字典的功能,数据源可以分为很多种,比如:物理文件、数据库、内存变量等等。物理文件又包括很多种类型的文件,比如:xml、json等等。这篇文章旨在讲解各种数据源的ConfigurationProvider对象。

一、MemoryConfigurationProvider

先看下代码:

namespace Microsoft.Extensions.Configuration.Memory

{

using Microsoft.Extensions.Configuration;

using System;

using System.Collections;

using System.Collections.Generic;

public class MemoryConfigurationProvider : ConfigurationProvider, IEnumerable<KeyValuePair<string, string>>, IEnumerable

{

private readonly MemoryConfigurationSource _source;

public MemoryConfigurationProvider(MemoryConfigurationSource source)

{

if (source == null)

{

throw new ArgumentNullException("source");

}

this._source = source;

if (this._source.InitialData != null)

{

foreach (KeyValuePair<string, string> pair in this._source.InitialData)

{

string introduced2 = pair.get_Key();

base.Data.Add(introduced2, pair.get_Value());

}

}

}

public void Add(string key, string value)

{

base.Data.Add(key, value);

}

public IEnumerator<KeyValuePair<string, string>> GetEnumerator()

{

return base.Data.GetEnumerator();

}

IEnumerator IEnumerable.GetEnumerator()

{

return (IEnumerator) this.GetEnumerator();

}

}

}

可以看到,这个对象继承自ConfigurationProvider和IEnumerable<KeyValuePair<string,string>>,可以知道这个对象本身就是一个字典类型的集合,如果想添加配置可以通过Add方法直接添加。

我们知道,ConfigurationProvider是注册在ConfigurationBuilder对象之上工作的,那么它是怎么注册到这个对象上的呢?看以下代码:

namespace Microsoft.Extensions.Configuration

{

using Microsoft.Extensions.Configuration.Memory;

using System;

using System.Collections.Generic;

using System.Runtime.CompilerServices;

public static class MemoryConfigurationBuilderExtensions

{

public static IConfigurationBuilder AddInMemoryCollection(this IConfigurationBuilder configurationBuilder)

{

if (configurationBuilder == null)

{

throw new ArgumentNullException("configurationBuilder");

}

configurationBuilder.Add(new MemoryConfigurationSource());

return configurationBuilder;

}

public static IConfigurationBuilder AddInMemoryCollection(this IConfigurationBuilder configurationBuilder, IEnumerable<KeyValuePair<string, string>> initialData)

{

if (configurationBuilder == null)

{

throw new ArgumentNullException("configurationBuilder");

}

MemoryConfigurationSource source = new MemoryConfigurationSource {

InitialData = initialData

};

configurationBuilder.Add(source);

return configurationBuilder;

}

}

}

通过对IConfigurationBuilder的扩展,实现把MemoryConfigurationProvider注册进来。

二、JsonConfigurationProvider

顾名思义,提供对json文件的转换,转换为数据字典。

public class JsonConfigurationProvider : FileConfigurationProvider

{

// Methods

public JsonConfigurationProvider(JsonConfigurationSource source);

public override void Load(Stream stream);

[IteratorStateMachine(typeof(<ReadLines>d__3))]

private static IEnumerable<string> ReadLines(StreamReader streamReader);

private static string RetrieveErrorContext(JsonReaderException e, IEnumerable<string> fileContent);

}

是通过以下扩展类实现对ConfigurationBuilder的添加。

public static class JsonConfigurationExtensions

{

// Methods

public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path);

public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path, bool optional);

public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, string path, bool optional, bool reloadOnChange);

public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, IFileProvider provider, string path, bool optional, bool reloadOnChange);

}

VS2015创建的带有MVC模板的.net core项目的Startup文件中用法如下:

Optioanal表示如果指定文件不存在不抛出异常而是返回一个空的字典对象。

其他的比如:XmlConfiguationProvider、IniConfigurationProvider类似,不再一一讲解。

Asp.Net Core- 多样性的配置来源的更多相关文章

  1. asp.net core 系列 10 配置configuration (上)

    一.  ASP.NET Core 中的配置概述 ASP.NET Core 中的应用配置是基于键值对,由configuration 程序提供. configuration  将从各种配置源提供程序操作键 ...

  2. ASP.NET Core开发-如何配置Kestrel 网址Urls

    ASP.NET Core中如何配置Kestrel Urls呢,大家可能都知道使用UseUrls() 方法来配置. 今天给介绍全面的ASP.NET Core 配置 Urls,使用多种方式配置Urls. ...

  3. asp.net core 将配置文件配置迁移到数据库(一)

    asp.net core 将配置文件配置迁移到数据库(一) Intro asp.net core 配置默认是项目根目录下的 appsettings.json 文件,还有环境变量以及 command l ...

  4. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我 ...

  5. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  6. (11)ASP.NET Core 中的配置一(Configuration)

    1.前言 ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置.环境变量配置.文件配置.内存配置,自定 ...

  7. (12)ASP.NET Core 中的配置二(Configuration)

    1.内存配置 MemoryConfigurationProvider使用内存中集合作为配置键值对.若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemory ...

  8. ASP.NET Core Windows 环境配置

    ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应用程序 尽管 ASP. ...

  9. 聊聊ASP.NET Core中的配置

    ​作为软件开发人员,我们当然喜欢一些可配置选项,尤其是当它允许我们改变应用程序的行为而无需修改或编译我们的应用程序时.无论你是使用新的还是旧的.NET时,可能希望利用json文件的配置.在这篇文章中, ...

  10. 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)

    翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...

随机推荐

  1. Consistent Hashing算法-搜索/负载均衡

    在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...

  2. 如何在VS2010中使用Async功能?

    伴随C#5.0的发布,“异步”特性越来越深入人心:在VS2012中早就可以使用它大大简化异步编程的痛苦,那么在VS2010中呢?我们无法尝鲜么?答案是“No”!,其实我们可以这样做: 1)必须把你的V ...

  3. C语言动态生成二维数组

    # 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...

  4. 设置一个POJO的某个属性的默认值

    //月利率private BigDecimal monthRate=new BigDecimal(0);  

  5. Codeforces 374B - Inna and Nine

    原题地址:http://codeforces.com/problemset/problem/374/B 这道题没什么难度,但是考场上就是没写对.Round #220彰显了它的逗比性质——这道题的“标算 ...

  6. JSOI2008 最小生成树计数

    题解: 最小生成树的两个性质: 1.边权相等的边的个数一定. 2.做完边权为w的所有边时,图的连通性相同. 证明: 1.边权相等的边的个数不一样的话就不会都同时是最小生成树了. 2.假设每种方法的做完 ...

  7. asp.net SqlParameter关于Like的传参数无效问题

    按常规的思路,我们会这样写 复制代码代码如下: String searchName ="Sam"; String strSql = "select * FROM Tabl ...

  8. 设计模式:Observer(观察者)—— Guava EventBus

    本文分为三个部分:   Observer(观察者) Guava EventBus详解 Guava EventBus使用示例   1. Observer(观察者)   1.1 背景   我们设计系统时, ...

  9. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.7

    The set of all invertible matrices is a dense open subset of the set of all $n\times n$ matrices. Th ...

  10. 【管理工具】Kerberos简单应用

    Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者”系统设计上采用客户端/服务器结构与DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证.可以用于防止窃听 ...