</summary>
9 [ConfigurationProperty("type")]
10 public string Type
11 {
12 get
13 {
14 return (string)base["type"];
15 }
16 }
17 }
3. ConnectionStrings类
ConnectionStrings、DataProviders、ConnectionDecrypts三个配置列表实体,都会使用到使用配置项的名称获取对应的配置信息,因此需要将公共方法提取出来基类。
1 public abstract class NamedConfigurationElementCollection<T> : ConfigurationElementCollection
2
3 where T : NamedConfigurationElement, new()
4
5 {
6
7 /// <summary>
8 /// 按照名称获取指定的配置元素
9 /// </summary>
10 /// <param name="name">名称</param>
11 /// <returns>配置元素</returns>
12 public new T this[string name] { get { return (T)BaseGet(name); } }
13
14
15 /// <summary>
16 /// 是否包含指定的配置元素
17 /// </summary>
18 /// <param name="name">配置元素名称</param>
19 /// <returns>是否包含</returns>
20 public bool ContainsKey(string name) { return BaseGet(name) != null; }
21
22 /// <summary>
23 /// 添加元素
24 /// </summary>
25 /// <param name="obj"></param>
26 public virtual void Add(T obj)
27 {
28 BaseAdd(obj);
29 }
30
31 /// <summary>
32 /// 得到元素的Key值
33 /// </summary>
34 /// <param name="element">配置元素</param>
35 /// <returns>配置元素所对应的配置元素</returns>
36 protected override object GetElementKey(ConfigurationElement element) { return ((T)element).Name; }
37
38 /// <summary>
39 /// 生成新的配置元素实例
40 /// </summary>
41 /// <returns>配置元素实例</returns>
42 protected override ConfigurationElement CreateNewElement() { return new T(); }
43 }
定义基类后,ConnectionStrings、DataProviders、ConnectionDecrypts三个配置列表实体只需要继承该基类,不需要任何实现。
1 public class ConnectionStringCollection: NamedConfigurationElementCollection<ConnectionStringElement>
2 {
3
4
5
6 }
7
8 public class DataProviderCollection: NamedConfigurationElementCollection<DataProviderElement>
9 {
10
11 }
12
13 public class ConnectionDecryptCollection: NamedConfigurationElementCollection<ConnectionDecryptElement>
14 {
15
16
17 }
通过以上配置实体类的定义,就可以使用以下方式获取到数据库配置信息:
DBConnectionConfiguration settings = DBConnectionConfiguration.GetConfig();
然后,根据数据库连接的名称获取到对应的信息,比如:
var connectionString = settings.ConnectionStrings[dbName].ConnectionString;
这里的DBName就是connectString配置项中的name信息。
|