22
2016
12

Asp.Net Core自定义配置并绑定

Asp .Net Core 中的配置文件与以前有很大不同,以前采用名为web.config的配置文件。现在.Net Core中采用了全新设计的配置系统,提供了三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,提供了大量的API。Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。配置系统支持内存中对象、INI 文件、JSON 文件、XML 文件、命令行自变量、环境变量、加密的用户存储的配置提供程序,也可以自己创建提供程序。功能很强大,看起来好像也很复杂,其实使用预定义好的提供程序使用起来还是很简单的。

以键值对的形式读取变量很简单,如果数据量比较大采用配置绑定到类型使用起来比较方便,这里以采用Json格式的配置为例实现绑定配置到类型。

1、创建要绑定的配置类

先创建一个注入服务的类型配置项类

using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Ninesky.Models
{
    /// <summary>
    /// 注入的服务项
    /// </summary>
    public class ServiceItem
    {
        /// <summary>
        /// 服务类型[含命名空间]
        /// </summary>
        public string ServiceType { get; set; }
        /// <summary>
        /// 实现类类型[含命名空间]
        /// </summary>
        public string ImplementationType { get; set; }
        /// <summary>
        /// 生命周期
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public ServiceLifetime LifeTime { get; set; }
    }
}

在创建一个程序集配置项类

using System.Collections.Generic;
namespace Ninesky.Models
{
    /// <summary>
    /// 程序集注入项目
    /// </summary>
    public class AssemblyItem
    {
        /// <summary>
        ///  服务的程序集名称[不含后缀]
        /// </summary>
        public string ServiceName { get; set; }
        /// <summary>
        /// 实现程序集名称[函后缀.dll]
        /// </summary>
        public string ImplementationName { get; set; }
        /// <summary>
        /// 注入项目
        /// </summary>
        public List<ServiceItem> DIService { get; set; }
    }
}

2、创建配置文件

在项目根目录下添加Json类型的配置文件,名称为service.json,代码如下:

{

  "Assembly": [

    {

      "ServiceName": "Ninesky.InterfaceBase",

      "ImplementationName": "Ninesky.Base.dll",

      "DIService": [

        {

          "ServiceType": "Ninesky.InterfaceBase.InterfaceCategoryService",

          "ImplementationType": "Ninesky.Base.CategoryService",

          "LifeTime": "Scoped"

        }

      ]

    }

  ]

}

创建了Assembly集合,键值对与AssemblyItem类对应,其中DIService集合的键值对与ServiceItem对应。

3、读取配置文件并绑定。

在Startup中读取配置文件并绑定到类型。关键代码如下

            var a1 = new ConfigurationBuilder()//创建ConfigurationBuilder

                .SetBasePath(env.ContentRootPath)//设置路径

                .AddJsonFile("service.json", optional: true, reloadOnChange: true)//设置Json文件

                .Build();

            var a2 = a1.GetSection("Assembly");//获取配配置节

            var a3 = a2.Get<List<AssemblyItem>>();//绑定到类型

每一句都进行了注释不在另外解释。

变量a3的下边加个断点,看一下绑定是否正常。

可以看到配置文件中的项都一一对应绑定到生命的变量a3中。

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。