ASP.NET 5 入门 (2) – 自定义配置

原文:ASP.NET 5 入门 (2) – 自定义配置

 

ASP.NET 5 入门 (2) – 自定义配置

ASP.NET 5 理解和入门

建立和开发ASP.NET 5 项目

初步理解ASP.NET5的配置

正如我的第一篇文章ASP.NET 5 (vNext) 理解和概述 所说,ASP.NET 5的具有全新的配置机制,我们可以通过以下几点来进行理解:

  1. 支持多种跨平台的配置文件格式(如XML, Json, Ini和环境变量)
  2. 标准的配置文件如project.json不再包括任何自定义的配置信息.
  3. 自定义的配置完全由开发者另行建立和加载
  4. 自定义的配置信息可以通过依赖注入向全项目发放

建立自定义配置文件

首先我们在项目的根目录加入自定义的配置文件,config.json和config.ini (这里的文件名是可以任意定义的).

                       

Config.json的内容我们模拟如下

复制代码
{"AppSettings": {"SiteTitle": "ASP.NET 5 Sample"},"Data": {"DefaultConnection": {"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ASPNET5;Trusted_Connection=True;MultipleActiveResultSets=true"}}
}
复制代码


Config.Ini的内容我们模拟如下:

DefaultPage=index.html

 

加载配置文件

之前也曾经提过,我们一般通过Startup类的构造函数来加载配置文件. Startup类的配置文件一般这样定义.

 

     public Startup(IHostingEnvironment env){}


在最小模板,如果读取Json和ini文件,我们需要加入ConfigurationModel.Json的组件:

 

然后我们可以加入下面的代码来读取任意json文件,ini文件和系统环境变量

复制代码
      public Startup(IHostingEnvironment env){// 加载自定义的Json配置文件和INI配置文件var configuration = new Configuration().AddJsonFile("config.json").AddIniFile("config.ini");//加入系统的环境变量
            configuration.AddEnvironmentVariables();}
复制代码

 

使用配置信息

加载完毕以后,利用上述代码中产生的configuration变量就能很方便的读取各种配置信息,这里提醒下,在以对象结构保存的配置信息中, Configuration类用”:”来实现对对象属性的导航,不太理解的可以看下面的代码:

 

复制代码
           //尝试输出一些配置信息//对应config.json的Data.DefaultConnection.ConnectionStringConsole.WriteLine(configuration["Data:DefaultConnection:ConnectionString"]);//对应config.ini的DefaultPageConsole.WriteLine(configuration["DefaultPage "]);//对应系统环境里面的PathConsole.WriteLine(configuration["Path"]);
复制代码

 

 

装载配置到环境容器

在Startup类中,我们可以很方便的通过一个成员变量来传递的configuration变量,比较常见的写法可以类似下面的代码

复制代码
        private IConfiguration Configuration { get; set; }public Startup(IHostingEnvironment env){// 加载自定义的Json配置文件和INI配置文件var configuration = new Configuration().AddJsonFile("config.json").AddIniFile("config.ini");//加入系统的环境变量
            configuration.AddEnvironmentVariables();//赋值给成员变量Configuration = configuration;}
复制代码

 

但如果在整个项目中,就需要利用依赖注入技术把配置信息装载到环境容器中去,才能在整个项目中被灵活的调用.

在我前一篇博文关于启动类的描述中,曾经提及 Startup的ConfigureServices函数就是负责装载所有依赖注入服务的函数,所以我们需要在那里加入装载代码:

      public void ConfigureServices(IServiceCollection services){//把Configuration对象放入服务容器services.AddInstance(typeof(IConfiguration), Configuration);}


注意这里的Configration是成员变量.

在其他区域使用配置

如何在项目的其他地方使用配置信息呢? 针对ASP.NET 5的依赖注入方式,我们一般有2种选择.

  1. 通过扩展任何在同一容器中的对象的构造函数的参数,来隐式的加载其他服务元素,这种方式略有晦涩,但非常简洁.(这种方式将在以后的MVC 6和EF 7介绍中再着重讨论)
  2. 通过当前上下文(在很多场合都可以通过我们的老朋友HttpContext获取)中的ApplicationServices属性,获取相对应的服务元素.

这里我们还没有加载MVC或者EF,我们就以Startup类的Configure函数来做一个示范:

第一种模式代码示例:

复制代码
      public void Configure(IApplicationBuilder app,IConfiguration configuration){//从当前容器中读出配置信息Console.WriteLine(configuration["DefaultPage"]);Console.WriteLine(configuration["AppSettings:SiteTitle"]);}
复制代码


注意, IConfiguration configuration参数的隐式 转换是因为之前我们已经把Configuration加入Service容器. 如果没有之前的注册,这里的代码会报错.

第二种模式代码示例:

 

复制代码
       public void Configure(IApplicationBuilder app){var configuration = (IConfiguration)app.ApplicationServices.GetService(typeof(IConfiguration));//从当前容器中读出配置信息Console.WriteLine(configuration["DefaultPage"]);Console.WriteLine(configuration["AppSettings:SiteTitle"]);}
复制代码


在后续的常见对象里,比如MVC的Controller,和EF的DbContext等,我们能够很便利的利用这2种方式获取整个项目的配置信息.

 好了,利用上面说到的方法,我们已经可以非常灵活在ASP.NET 5项目中,设置配置文件,加载配置文件,和使用配置信息,而且基于MVC服务,我们还可以对配置信息进行进一步的封装,

ASP.NET5的配置机制是不是很方便. 还有人想念web.config吗?

转载于:https://www.cnblogs.com/owenzh/p/11168304.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中有冒号 文件路径_用Matlab脚本文件实现Excel文件的合并

日常吐槽前段时间跟同事聊天,同事洗脑了一个新的(扎心的)世界观,“人生分三个阶段,20岁时承认父母很平庸,30岁时承认自己很平庸,40岁时承认孩子很平庸”。这是这位同事在孩子学而思考试后的心得…

ios系统gps测试软件,GPS工具箱苹果版

GPS工具箱为用户准备的以手机GPS为基础的多功能位置服务的软件,它包括了很多非常实用的工具,包含线路追踪、测速、位置记录、面积测量等等,是GPS模块的功能发挥的非常充分到位,并且软件支持离线map和KML、KMZ导入导出、GPX文件导出…

用统计功能计算机计算js,js实现计算器功能

本文实例为大家分享了js实现计算器功能的具体代码,供大家参考,具体内容如下知识点eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。代码如下js计算器计算器.h1{position: relative;color:blueviolet;font-size:50px;text-align…

方法的覆盖

【转载】类继承时方法覆盖问题。(static方法不能被”覆盖“) (2014-04-03 17:51:17) 转载▼在看TIJ4的144页说: “覆盖”只有在某方法是基类的接口的一部分时才会出现。 即,必须能将一个对象向上转型为他的基本类型并调用相同的方…

恋与制作人 服务器错误,恋与制作人安装失败怎么办_恋与制作人安装失败解决方法_游戏吧...

恋与制作人是一款受到了很多玩家喜爱的游戏,游戏是奇迹暖暖原班人马打造的,但是却有玩家在安装时出现了安装失败的问题。下面游戏吧小编就为各位各位玩家带来了恋与制作人的安装失败解决方法。安装失败解决方法一、 安装软件时提示应用程序未安装或者提示…

create-react-app创建项目后运行npm run eject命令报错解决办法

用create-react-app创建项目,因要配置各种组件,比如babel,antd等, 需要运行npm run eject命令把项目的配置文件暴露出来,但是还是一如既然碰到报错,因为是在本地新创建的文件,没有添加git记录 解决办法&…

wps的计算机在哪里设置密码,wps文件怎么设置和取消密码 wps文件密码设置和取消的步骤方法...

在wps制作文件时,有时候我们需要中途离开,但是担心其他用户不小心操作导致文件丢失,那么我们可以设置wps文件密码,这样就可以避免了,那么怎么将wps文件设置密码呢?其实设置方法非常简单,下面教程之家网为大…

魔兽世界联盟物价稳定的服务器,一个残酷的真相!在《魔兽世界》怀旧服,女生一般都爱选联盟...

原标题:一个残酷的真相!在《魔兽世界》怀旧服,女生一般都爱选联盟随着《魔兽世界》经典旧世的人气渐涨,暴雪又追加了3组PVP服,让不少没能抢注到心仪昵称的玩家欣喜若狂。这样一来,原本就饱受争议的服务器选…

SQL Server 2005 Hierarchies WITH Common Table Expressions

代码 1 createtableEmployee2 (3 Id INTIDENTITY(1,1) PRIMARYKEY, 4 [Name]varchar(30) null, 5 JobTitle varchar(30) null, 6 Manager intnull7 )8 9 insertEmployee10 selectincf, IT Director,nullunionall11 selectinc3, Finance Director,nullunionall12 select…

安卓导航无信号无服务器,无信号导航能用否

● 出发前测试为解析导航不准的原因,我们先来了解一下GPS导航原理。导航仪是通过接受GPS信号来确定位置所在,再通过存储于内存中的地图数据规划路线。在车辆行驶时,导航仪通过不断接受GPS信号来检测车辆所在地状态,从而提示指引信…

NTC热敏电阻基础以及应用和选择(转)

源:NTC热敏电阻基础以及应用和选择 NTC被称为负温度系数热敏电阻,是由Mn-Co-Ni的氧化物充分混合后烧结而成的陶瓷材料制备而来,它在实现小型化的同时,还具有电阻值-温度特性波动小、对各种温度变化响应快的特点,可被用…

MSN无法登陆,服务暂时不可用(错误码:80048051)

好几次MSN突然就登陆不了,一次是改了系统时间,这个好办,你改成当前日期时间即可; 还有一个可能就是脱机工作: 請依照以下步驟進行除錯: 1. 關閉Windows Live Messenger 先關閉你的MSN,在右下角找…

Java基础教程——线程通信

线程通信:等待、唤醒 Object方法这些方法在拥有资源时才能调用notify唤醒某个线程。唤醒后不是立马执行,而是等CPU分配wait等待,释放锁,不占用CPU资源notifyAll唤醒全部等待的线程重点:资源的有效利用 生产一个&#x…

cad画直角命令_炸了,CAD fro命令配合tk命令,极轴追踪无敌!

文尾左下角阅读原文看视频教程好课推荐:零基础CAD:点我CAD室内:点我 周站长CAD:点我CAD机械:点我 Bim教程:点我CAD建筑:点我CAD三维:点我全屋定制:点我 ps教程&#xff1…

025 程序的循环结构

目录 一、概述二、遍历循环三、遍历循环的应用3.1 计数循环(N次)3.2 计数循环(特定次)3.3 字符串遍历循环3.4 列表遍历循环3.5 文件遍历循环四、无限循环五、循环控制保留字5.1 break 和 continue5.1.1 for5.1.2 while六、循环的高级用法6.1 循环的扩展6.1.1 for6.1.2 while七、…

灰度值怎么降级_微服务生态的灰度发布如何实现?

前言相信很多小伙伴们都听说过灰度发布,但是不一定知道如何实现?今天我们就介绍一下基本原理,以及提供代码实现给小伙伴们。灰度概念即原来的生产环境是1.0版本,那现在我们需要升级到2.0版本,但是我们需要验证2.0版本&…

在电脑上显示未知发布者怎么办_笔记本电脑显示器花屏怎么办?电脑屏幕花屏的解决方法...

笔记本电脑显示器花屏怎么办?笔记本电脑屏幕花屏该如何解决呢?近日有用户反映在使用笔记本电脑时候,会出现花屏的问题,下面就给大家介绍具体解决方法。一:检查显示器与显卡的连线是否松动若显示屏花屏的话,…

mongodb 字段出现次数_MongoDB数据库

内容回顾Xpath选择器不要求记忆,只要混个眼熟即可基于openpyxl模块爬取豆瓣电影单页爬取多页爬取1.校验请求头里面是否有User-Agent参数 请求头里面加上即可2.限制IP规定时间内的访问次数 1.人为的加上时间延迟 在你的程序里面加上time.sleep()让你的程序间歇一段时…

相似三角形·中考

概述相似,主要是相似三角形,在中考中有举足轻重的地位,难度也较高,往往倒三题中至少有一题是圆和相似的结合相似常常和四边形、反比例函数、圆、二次函数等结合,十分灵活 比例性质 概念若$\displaystyle \frac{a}{b}\f…

php 对接 北向数据接口 socket

function encode($msgType, $timeStamp, $body) {return "\xFF\xFF".pack(CNn, $msgType, $timeStamp, strlen($body)).$body;}$connection->send(encode(1, time(), reqLoginAlarm;userxxx;keyxxx;typexxx)); 详情参考: 请教使用socket做为客户端和北向接口对接&…