zoukankan      html  css  js  c++  java
  • 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");
    
            </span><span style="color: #008000;">//</span><span style="color: #008000;">加入系统的环境变量</span>
    

    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"]);
    
        }</span></pre>
    
    复制代码


    注意, 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吗?

  • 相关阅读:
    CSS3中三种清除浮动(float)影响的方式
    HTML中关于动态创建的标签无法绑定js事件的解决方法:.on()方法的 [.selector]
    Android 5.0以上heads up通知
    CoordinatorLayout
    ViewDragHelper
    Transition FrameWork
    Android启动过程
    不要滥用SharedPreference
    不要在Application中缓存数据
    SparseArray替代HashMap来提高性能
  • 原文地址:https://www.cnblogs.com/owenzh/p/11168304.html
Copyright © 2011-2022 走看看