自定义配置信息的高级应用
通过上篇博文对简单的自定义配置信息的学习,使得更加灵活的控制系统配置信息。实际项目中,这种配置的灵活度往往无法满足项目的灵活度和扩展性。
比如,一个配置信息有三部分组成,而每部分中有包括一些配置信息。仅仅使用简单的自定义配置无法满足,因此,需要提供更多的自定义配置方法来灵活实现。
针对配置信息中包括配置列表和配置项的要求,主要使用.Net Framework中的以下两个类来实现:
ConfigurationElement:配置文件中的一个配置项
ConfigurationElementCollection:配置文件中的一个配置项集合
ConfigurationSection:配置文件中的一个配置节信息。
使用下面的表格能够更好说明三者之间的关系:
ConfigurationSection |
||
1:N |
ConfigurationElementCollection |
|
1:N |
ConfigurationElement <add …/> |
|
ConfigurationElement <add …/> |
||
ConfigurationElement <add …/> |
针对以上知识点,使用一个项目实例逐渐展开。
项目需求:
库位管理系统需要实现仓库的全方位展示,设计多种数据(SQLserver、Oracle、MySQL等),每个数据库连接字符串的加密方式存在无法统一的情况。
配置文件的规划:
针对以上需求,对数据库配置文件信息的规划为:
DBConnectionConfiguration(ConfigurationSection) |
|
||||||||||
|
ConnectionStrings(ConfigurationElementCollection) |
|
|||||||||
|
ConnectionString1(ConfigurationElement) |
|
|||||||||
name |
description |
connectionString |
providerName |
connectionDecryptName |
|
||||||
ConnectionString2(ConfigurationElement) |
|
||||||||||
name |
description |
connectionString |
providerName |
connectionDecryptName |
|||||||
DataProviders(ConfigurationElementCollection) |
|
||||||||||
|
DataProvider1(ConfigurationElement) |
|
|||||||||
name |
description |
type |
|
||||||||
DataProvider2(ConfigurationElement) |
|
||||||||||
name |
description |
type |
|
||||||||
ConnectionDecrypts(ConfigurationElementCollection) |
|
||||||||||
|
ConnectionDecrypt(ConfigurationElement) |
|
|||||||||
name |
description |
type |
|
||||||||
ConnectionDecrypt(ConfigurationElement) |
|
||||||||||
name |
description |
type |
|
配置信息实体的定义:
针对以上配置信息,先对配置信息对应的实体进行设计:
1. DBConnectionConfiguration类
它作为配置文件中的一个配置节存在,配置节名称定义为TT.connectionManager,需要继承自ConfigurationSection类,同时,它还需要定义三个属性,分别是ConnectionStrings、DataProviders、ConnectionDecrypts,这三个属性都是列表信息,因此是ConfigurationElementCollection的自定义子类。
1 /// <summary> 2 /// 数据库连接配置信息 3 /// </summary> 4 public class DBConnectionConfiguration : ConfigurationSection 5 { 6 private const string SECION_NAME = "TT.connectionManager"; 7 8 /// <summary> 9 /// 获取数据库连接配置信息 10 /// </summary> 11 public static DBConnectionConfiguration GetConfig() 12 { 13 var config = ConfigurationManager.GetSection(SECION_NAME) as DBConnectionConfiguration; 14 return config; 15 } 16 17 /// <summary> 18 /// 数据库连接字符串配置集合 19 /// </summary> 20 [ConfigurationProperty("connectionStrings")] 21 public ConnectionStringCollection ConnectionStrings 22 { 23 get 24 { 25 return (ConnectionStringCollection)base["connectionStrings"]; 26 } 27 } 28 29 /// <summary> 30 /// DataProvider配置集合 31 /// </summary> 32 [ConfigurationProperty("dataProviders", IsRequired = true)] 33 public DataProviderCollection DataProviders 34 { 35 get 36 { 37 return (DataProviderCollection)base["dataProviders"]; 38 } 39 } 40 41 /// <summary> 42 /// 连接字符串加密方式 43 /// </summary> 44 [ConfigurationProperty("connectionDecrypts", IsRequired = false)] 45 public ConnectionDecryptCollection ConnectionDecrypts 46 { 47 get 48 { 49 return (ConnectionDecryptCollection)base["connectionDecrypt