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.ConnectionString
Console.WriteLine(configuration["Data:DefaultConnection:ConnectionString"]);
//对应config.ini的DefaultPage
Console.WriteLine(configuration["DefaultPage "]);
//对应系统环境里面的Path
Console.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吗?

ASP.NET 5 入门 (2) – 自定义配置的更多相关文章

  1. springboot 入门八-自定义配置信息(编码、拦截器、静态资源等)

    若想实际自定义相关配置,只需要继承WebMvcConfigurerAdapter.WebMvcConfigurerAdapter定义些空方法用来重写项目需要用到的WebMvcConfigure实现.具 ...

  2. Asp.Net Core入门之自定义中间件

    什么是中间件? 这里引用官方解释: 中间件是用于组成应用程序管道来处理请求和响应的组件.管道内的每一个组件都可以选择是否将请求交给下一个组件.并在管道中调用下一个组件之前和之后执行某些操作.请求委托被 ...

  3. Asp.Net Core入门之自定义服务注册

    谈到服务注册,首先我们先了解一下服务注册时使用的三种方式,也代表了不同的服务生命周期: AddTransient AddScoped AddSingleton AddSingleton生命周期最长,其 ...

  4. MVC自定义配置

    ASP.NET 5 入门 (2) – 自定义配置 ASP.NET 5 理解和入门 建立和开发ASP.NET 5 项目 初步理解ASP.NET5的配置 正如我的第一篇文章ASP.NET 5 (vNext ...

  5. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  6. ASP.NET MVC 学习笔记-7.自定义配置信息

    ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, <appSettings> <add key="LogInf ...

  7. SpringBoot入门(五)——自定义配置

    本文来自网易云社区 大部分比萨店也提供某种形式的自动配置.你可以点荤比萨.素比萨.香辣意大利比萨,或者是自动配置比萨中的极品--至尊比萨.在下单时,你并没有指定具体的辅料,你所点的比萨种类决定了所用的 ...

  8. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  9. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

随机推荐

  1. hash 表 | | jzoj 1335 | | 脑残+手残 | | 集合的关系

    给定两个集合A.B,集合内的任一元素x满足1 ≤ x ≤ 10^9,并且每个集合的元素个数不大于10^5.我们希望求出A.B之间的关系. 给定两个集合的描述,判断它们满足下列关系的哪一种:A是B的一个 ...

  2. What's VPC (by quqi99)

    作者:张华  发表于:2014-12-09版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) VPC ...

  3. Bootstrap 模态框 + iframe > 打开子页面 > 数据传输/关闭模态框

    父页面bootstrap模态框: <div class="modal fade" id="myModal" tabindex="-1" ...

  4. 大漠绑定测试工具-VB6

    获取更新开始|版本:3.1652版 2016年12月27日|更新内容:1.取消自动更新错误的提示.\n\n友情提示:如网盘失效,请加QQ群(568073679)下载最新版|下载地址:http://ww ...

  5. OD使用教程9

    先运行程序打开about,发现这是一个未注册的软件需要注册后才能使用里面的工具,所以随便注册一下,跳出一个提示说注册的是非法的邮箱,所以就可以以此做为突破口来破解这个程序 将提示的语句作为关键字去找出 ...

  6. 猿团YTFCloud生态系统,全面服务创业者

    9月15日,YTFCloud已正式开启了内测. 创业者翘首以待的YTFCloud,虽然让部分创业者感受到了它的神奇,但对于更多暂时无法尝试的创业者来说,它依然有一层神秘的面纱. 今天小编就来带你近距离 ...

  7. Java回调函数

    维基百科上的定义:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 所谓回调,就是客户程序C调用服务程 ...

  8. Java和C#语法对比

    Java 有静态导入,既可以导入静态方法和字段. .NET没有 Java里package和文件夹对应关系是强制的,要改都改.而C#中namespace和文件夹可以不对应,C# 更喜欢在一个projec ...

  9. Spring学习笔记 6. 尚硅谷_佟刚_Spring_Bean 之间的关系

    1,继承关系 首先从简单的代码来看,有一个Address类,配置文件有两个bean (1)Address类 package com.zsq; public class Address { privat ...

  10. About MTU,TCP-MSS (转)

    MSS是Maxitum Segment Size 最大分段大小的缩写,意为TCP数据包每次能够传输的最大数据分段,是TCP协议里面的一个概念.MSS值所表示的是TCP报文的净载荷数据大小.通过设置其大 ...