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

原文转载自:http://www.cnblogs.com/zergcom/p/4506662.htmlhtml

初步理解ASP.NET5的配置

正如个人第一篇文章ASP.NET 5 (vNext) 理解和概述 所说,ASP.NET 5的具备全新的配置机制,咱们能够经过如下几点来进行理解:web

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

创建自定义配置文件

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

                       

Config.json的内容咱们模拟以下json

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


Config.Ini的内容咱们模拟以下:app

DefaultPage=index.html

 

加载配置文件

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

 

     public Startup(IHostingEnvironment env)
      {
      }


在最小模板,若是读取Json和ini文件,咱们须要加入ConfigurationModel.Json的组件:ui

 

而后咱们能够加入下面的代码来读取任意json文件,ini文件和系统环境变量spa

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

            //加入系统的环境变量
            configuration.AddEnvironmentVariables();
        }
复制代码

 

使用配置信息

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

 

复制代码
           //尝试输出一些配置信息
            //对应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变量,比较常见的写法能够相似下面的代码htm

复制代码
        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吗?

相关文章
相关标签/搜索