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

2016-12-28 10:11:08来源:作者:九天网(Ninesky)人点击

第七城市

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中。

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台