博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net Core- 多样性的配置来源
阅读量:5098 次
发布时间:2019-06-13

本文共 3686 字,大约阅读时间需要 12 分钟。

我们知道,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
>, 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
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
> GetEnumerator(){return base.Data.GetEnumerator();}IEnumerator IEnumerable.GetEnumerator(){return (IEnumerator) this.GetEnumerator();}}}
View Code

 

可以看到,这个对象继承自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
> initialData){if (configurationBuilder == null){throw new ArgumentNullException("configurationBuilder");}MemoryConfigurationSource source = new MemoryConfigurationSource {InitialData = initialData};configurationBuilder.Add(source);return configurationBuilder;}}}
View Code

 

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

二、JsonConfigurationProvider

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

public class JsonConfigurationProvider : FileConfigurationProvider{// Methodspublic JsonConfigurationProvider(JsonConfigurationSource source);public override void Load(Stream stream);[IteratorStateMachine(typeof(
d__3))]private static IEnumerable
ReadLines(StreamReader streamReader);private static string RetrieveErrorContext(JsonReaderException e, IEnumerable
fileContent);}
View Code

 

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

public static class JsonConfigurationExtensions{// Methodspublic 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);}
View Code

 

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

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

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

转载于:https://www.cnblogs.com/zh1990/p/5682268.html

你可能感兴趣的文章
Python-requests之POST Data的json问题
查看>>
【Linux高级驱动】网卡驱动分析
查看>>
字符串处理函数
查看>>
jenkins修改时区
查看>>
比较git commit 两个版本之间次数
查看>>
jQuery.support
查看>>
java实现的加密解密
查看>>
网页瀑布流效果实现的几种方式
查看>>
LINUX与UNIX区别在哪
查看>>
python 快速排序代码
查看>>
Python装饰器学习(九步入门)
查看>>
通信原理1
查看>>
前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)
查看>>
错误和异常处理(7)
查看>>
TP5.0 调用bootstrap分页类显示分页
查看>>
【LeetCode】167. Two Sum II - Input array is sorted
查看>>
如何在g++中添加include文件的目录
查看>>
BlockingQueue深入解析
查看>>
网络编程
查看>>
POJ -2236 Wireless Network
查看>>