• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理

解读ASP.NET 5 & MVC6系列教程(5):Configuration配置信息管理

作者:汤姆大叔 字体:[增加 减小] 来源:互联网 时间:2017-05-11

汤姆大叔通过本文主要向大家介绍了精通asp.net mvc 5,html5 asp.net,pro asp.net mvc 5,asp net mvc 5,asp net培训等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在前面的章节中,我们知道新版的MVC程序抛弃了原来的web.config文件机制,取而代替的是config.json,今天我们就来深入研究一下配置文件的相关内容。

基本用法

新版的配置信息机制在Microsoft.Framework.ConfigurationModel命名空间下进行了重写,重写以后不仅支持XML格式,还支持json、ini、环境变量等。在模板示例程序中Startup类的构造函数内如,有如下语句:

// Setup configuration sources.
Configuration = new Configuration()
 .AddJsonFile("config.json")
 .AddEnvironmentVariables();
</div>

该语句的作用是将config.json文件以及环境变量信息加入到配置信息容器里,以便进行读取。而读取的时候则可以通过集合索引的形式或Get方法进行读取,示例如下:

var path = Configuration["Path"];
var path = Configuration.Get("Path");
</div>

其中,多层级key键的读取,需要在多个层级名称之间用冒号分割即可,示例如下:

var connString = Configuration.Get("Data:DefaultConnection:ConnectionString");
</div>

通过上述几段代码可以看出,该配置示例并不是全局实例,所以要想在别的地方也读取这些信息,就需要将该实例保存在一个全局静态变量上。

架构设计

新的配置信息处理机制,在重写以后,更加轻量级,而且是进行跨平台使用,可以从多个数据源获取配置信息,而不必在拘泥于.config文件,而且甚至可以为不同的环境(开发、测试、生产)设置不同的配置信息。整个配置机制的各个重要实体见下图:

http://files.weikejianghu.com/file_images/article/201606/2016624101044267.png

我们来一一讲述一下,这些类的具体作用:

1.IConfiguration - 配置信息的实例接口,该接口上的indexer、Get、TryGet、Set以及其它一些像Reload这样的方法一起用于获取基于key/value的配置信息。

2.IConfigurationSource - 该接口统一了各个配置源使用时的接口方法,比如TryGet、Set以及最重要的读取配置信息的load方法,以便将信息加载到配置子系统里。

3.IConfigurationSourceContainer - 所有配置源信息的一个容器,该容器使得可以在一个单独的Configuration实例上加载各种配置源的配置信息。该接口只有一个Add方法用于添加基于IConfigurationSource的配置源信息。

4.Configuration - 该类实现了IConfiguration接口和IConfigurationSourceContainer接口,不保存基于key/value的所有类型的配置信息。

5.ConfigurationExtensions - 扩展方法,用于快速加载配置信息,如AddCommandLine、AddIniFile等。

在Microsoft.Framework.ConfigurationModel命名空间下,目前有6种不同类型的配置源类型可以使用,分别如下:

1.MemoryConfigurationSource - 该配置源目前没有内置的add/load扩展方法(比如AddMemoryConfiguration),但你可以加载key/value类型的集合来实现此目的(如IEnumerable<KeyValuePair<string, string>>类型)。

2.IniFileConfigurationSource - 该配置源,可以将基于key/value格式的INI文件配置信息加载到配置系统中。

3.CommandLineConfigurationSource - 将程序启动时的命令行参数信息加载到配置系统中。

4.EnvironmentVariablesConfigurationSource - 将操作系统的环境变量信息加载到配置系统中,在Azure Website中,环境变量可以通过web界面进行设置,管理相当方便。

5.JsonConfigurationSource - 将json文件的信息加载配置系统。

6.XmlconfigurationSource - 将xml文件的信息加载到配置系统。

详细用法

首先,由于配置系统是多实例型的,所以每次使用之前都要先声明一个示例,代码如下:

IConfiguration configuration = new Configuration();
</div>

添加MemoryConfigurationSource

由于在IConfigurationSourceContainer上没有为MemoryConfigurationSource定义快速加载配置信息的扩展方法,所以如果想加载这种类型的配置信息,则需要按照如下形式进行添加:

((IConfigurationSourceContainer)Configuration)
 .Add(new MemoryConfigurationSource(
  new List<KeyValuePair<string, string>> {
  new KeyValuePair<string, string>("mem-key1", "mem-value1"),
  new KeyValuePair<string, string>("mem-key2", "mem-value2")
  }));
//取值方式
var someConfiguration1 = Configuration["mem-key1"];
var someConfiguration2 = Configuration.Get("mem-key2");
</div>

添加IniFileConfigurationSource

IniFileConfigurationSource类型的配置信息可以通过扩展方法进行加载,代码如下:

var configuration = new Configuration().AddIniFile("path\\to\\your\\configuration-ini-file.ini");
</div>

其中ini文件的格式模板如下:

[ini-sec]
ini-key1=value-a
ini-key2=value-b
[ini-sec2]
ini-key1=value-c
ini-key2=value-d
</div>

这里的[ini-sec]是自定义的配置节名称,每个配置节下面可以配置多个key/value项。取值方式和基本示例中的一样,层级之间(本例是配置节和key之间)要用冒号分割,示例如下:

var someConfiguration1 = Configuration["ini-sec:ini-key1"];
var someConfiguration2 = Configuration.Get("ini-sec2:ini-key2");
</div>

添加CommandLineConfigurationSource

在程序使用k run命名进行时传入的参数,可以通过该配置源进行读取,或者你也可以通过AddCommandLine扩展方法手工添加,示例如下:

var configuration = new Configuration().AddCommandLine(new string[] { "key1=value1", "key2=value2", "@key3=value3" });
</div>

上述示例中的每个字符串都要是key/value格式,可以使用少于的特殊符号比如$、/等。 针对这些key值,你也可以使用带有switchMappings参数构造函数的CommandLineConfigurationSource类来映射某些key,switchMappings参数的数据类型和示例如下:

var mappings = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
 { "key1", "tom1" },
 { "key2", "tom2" },
};
</div>

由于当前没有针对CommandLineConfigurationSource类的扩展方法,所以我们还是需要自己实例化该类,并添加到配置容器中,代码如下:

((IConfigurationSourceContainer)Configuration).Add(new CommandLineConfigurationSource(commandLineArguments, switchMappings: mappings));
</div>

执行上述代码以后,在获取配置值的时候,如下两个key的值是一样的:

var value1 = Configuration.Get("key1");
var value2 = Configuration["tom1"]; // tom1这个key的值其实就key1的值,因为tom1是key1的映射
</div>

在映射的时候,新的映射key字符串里不能包括“/”字符,否则会报异常同样的key不能传入两次,否则也会报异常加载配置信息时,如果有重复key,则后一个key的值会覆盖前一个key的值。加载CommandLine配置信息时,如果一个key字符串以-作为前缀,那么就必须利用switchMapping将一个新key映射到旧key上,否则就会出错。

添加EnvironmentVariablesConfigurationSource

ironmentVariablesConfigurationSource可以将操作系统的环境变量添加到配置系统中,同时你也可以对这些环境变量进行自定义,比如在VS开发调试的时候,可以在如下界面添加一些key/value:

http://files.weikejianghu.com/file_images/article/201606/2016624101054844.png

取值方式如下:

var someConfiguration1 = Configuration["env_var_key1"];
var someConfiguration2 = Co



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定
  • ASP.NET MVC从视图传参到控制器的几种形式
  • ASP.NET MVC 4 中的JSON数据交互的方法
  • ASP.NET MVC制作404跳转实例(非302和200)
  • 详解ASP.NET MVC 利用Razor引擎生成静态页
  • 详解ASP.NET MVC 解析模板生成静态页(RazorEngine)
  • Asp.net MVC下使用Bundle合并、压缩js与css文件详解
  • 详解Asp.Net MVC——控制器与动作(Controller And Action)
  • ASP.NET MVC生成静态页面的方法
  • ASP.NET MVC 导出Word报表

相关文章

  • 2017-05-11asp.net中Fine Uploader文件上传组件使用介绍
  • 2017-05-11异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
  • 2017-05-11ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)
  • 2017-05-11页面导出为Excel的时间格式的问题
  • 2017-05-11在asp.net中操作sql server数据库的一些小技巧
  • 2017-05-11asp.net UpdatePanel实现无刷新上传图片
  • 2017-05-11asp.net 两个不同页面的传值
  • 2017-05-11win7系统下 vs2010 调式就关闭要重启处理方法
  • 2017-05-11用扩展方法优化多条件查询(不定条件查询)
  • 2017-05-11ASP.NET配置文件Web.config用法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 决定何时使用 DataGrid、DataList 或 Repeater(ASP.NET 技术文章)
    • .net面向对象之多线程(Multithreading)及 多线程高级应用
    • asp.net String.IsNullOrEmpty 方法
    • WEB在模态窗体里导出或下载文件功能代码
    • .net自定义事件示例分享
    • asp.net mvc4 mysql制作简单分页组件(部分视图)
    • 分享下Asp.Net面试题目及答案集合
    • 根据控件Id得到控件并对该控件进行操作
    • asp.net 动态引用样式表代码
    • ASP.NET常用小技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有