类库探源——System.Configuration 配置信息处理

按照MSDN描述 System.Configuration 命名空间 包含处理配置信息的类型

本篇文章主要两方面的内容

1. 如何使用ConfigurationManager 读取AppSetting和ConnectionStrings

2. 如何使用自定义 Section,我这里的自定义Section格式为

<SectionName>
  <services>
    服务1的描述信息,供IoC容器使用
    服务2的描述信息,供IoC容器使用
    。。。
  </services>
</SectionName>

其实如果读者使用一些比较出名的IoC 框架(Unity)都会有配置管理,根本不用自定义Section,但是技多不压身,多了解点东西总是没错的。

一、ConfigurationManager 类

提供对客户端应用程序配置文件的访问。无法继承此类

命名空间: System.Configuration

程序集: System.Configuration.dll

继承关系:

原型定义:public static class ConfigurationManager

由上面的定义可以看出ConfigurationManager是一个静态类

静态属性:

1. ConfigurationManager.AppSettings      获取当前应用程序默认配置的 AppSettingsSection 数据

原型定义:public static NameValueCollection AppSettings { get; }

从上面的定义可以看出 AppSetting 是一个 键值对

2. ConfigurationManager.ConnectionStrings  获取当前应用程序默认配置的 ConnectionStringsSection 数据

例子:

app.config

 1 <?xml version="1.0"?>
 2 <configuration>
 3     <startup>
 4         <supportedRuntime version="v2.0.50727"/>
 5     </startup>
 6
 7     <connectionStrings>
 8         <add name="KKSEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX.XXX.XXX.XXX;initial catalog=KKS;user id=XXXX;password=KKKKK;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
 9     </connectionStrings>
10
11     <appSettings>
12         <add key="Aphasia" value="www.cnblogs.com/Aphasia"/>
13     </appSettings>
14 </configuration>

Program.cs

 1 using System;
 2 using System.Configuration;
 3
 4 namespace ConsoleApplication1
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             string web = ConfigurationManager.AppSettings["Aphasia"];
11             Console.WriteLine(web);
12
13             string cnstr = ConfigurationManager.ConnectionStrings["KKSEntities"].ConnectionString;
14             Console.WriteLine(cnstr);
15
16         }
17     }
18 }

效果:

二、 自定义Section

app.config

 1 <?xml version="1.0"?>
 2 <configuration>
 3     <configSections>
 4         <section name="ServicesSection" type="CustomDemo.ServicesSection,CustomDemo"/>
 5     </configSections>
 6
 7     <ServicesSection>
 8         <services>
 9             <add ServiceName="XXX服务1" Impl="XXX.Impl.XXXService1" Inter="XXX.Inter.XXXInter1" />
10             <add ServiceName="XXX服务2" Impl="XXX.Impl.XXXService2" Inter="XXX.Inter.XXXInter2" />
11             <add ServiceName="XXX服务3" Impl="XXX.Impl.XXXService3" Inter="XXX.Inter.XXXInter3" />
12         </services>
13     </ServicesSection>
14
15     <startup>
16         <supportedRuntime version="v2.0.50727"/>
17     </startup>
18 </configuration>

Program.cs

 1 using System;
 2 using System.Configuration;
 3
 4 namespace CustomDemo
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             ServicesSection myServices = ConfigurationManager.GetSection("ServicesSection") as ServicesSection;
11             foreach (Service item in myServices.ServiceItems)
12             {
13                 Console.WriteLine("ServiceName:{0} Impl:{1} Inter:{2}", item.ServiceName, item.Impl, item.Inter);
14             }
15         }
16     }
17
18     #region[自定义Section处理代码]
19     public class Service : ConfigurationElement
20     {
21         #region[当遇不能识别的元素时不让程序报错]
22         protected override bool OnDeserializeUnrecognizedAttribute(string name, string value)
23         {
24             return true;
25         }
26         protected override bool OnDeserializeUnrecognizedElement(string elementName, System.Xml.XmlReader reader)
27         {
28             return true;
29         }
30         #endregion
31
32         #region[节点元素]
33         [ConfigurationProperty("ServiceName", IsRequired = true)]
34         public string ServiceName
35         {
36             get { return this["ServiceName"].ToString(); }
37         }
38
39         [ConfigurationProperty("Impl", IsRequired = true)]
40         public string Impl
41         {
42             get { return this["Impl"].ToString(); }
43         }
44
45         [ConfigurationProperty("Inter", IsRequired = true)]
46         public string Inter
47         {
48             get { return this["Inter"].ToString(); }
49         }
50         #endregion
51     }
52
53     public class Services : ConfigurationElementCollection
54     {
55         protected override ConfigurationElement CreateNewElement()
56         {
57             return new Service();
58         }
59         protected override object GetElementKey(ConfigurationElement element)
60         {
61             return ((Service)element).ServiceName;
62         }
63     }
64
65     public class ServicesSection : ConfigurationSection
66     {
67         [ConfigurationProperty("services", IsDefaultCollection = false)]
68         public Services ServiceItems { get { return (Services)base["services"]; } }
69     }
70     #endregion
71 }

效果:

本小节代码下载

三、参考资料

1. .net自定义configSections的5个示例

时间: 2024-10-08 17:02:01

类库探源——System.Configuration 配置信息处理的相关文章

类库探源——System.Type

一.MSDN 描述 Type 类:表示类型声明:类类型.接口类型.数组类型.值类型.枚举类型.类型参数.泛型类型定义.以及开放或封闭构造的泛型类型. 命名空间: System 程序集:mscorlib.dll 继承关系: 从上面的继承关系能看出,Type和反射有关系,的确,引用MSDN上的话Type 为 System.Relection 功能的根也是访问元数组的主要方式. 二.获取 Type 的几种方式: 1. typeof 运算符 1 var type1 = typeof(TypeName);

类库探源——System.Delegate

一.MSDN 描述 Delegate 类:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法.(是不是感觉很像C语言中的函数指针 :) ) 命名空间: System 程序集:   mscorlib.dll 说到 Delegate 就必须谈 MulticastDelagate MulticastDelagate类 :表示多路广播委托:即,其调用列表中可以拥有多个元素的委托. 命名空间: System 程序集:   mscorlib.dll 继承关系: 备注: 1. Deleg

类库探源——System.String

一.MSDN描述 String 类: 表示文本,即一系列的 Unicode 字符 命名空间 : System 程序集 : mscorlib.dll 继承关系: 备注: 1. 字符串是 Unicode 字符的有序集合,用于表示文本.String 对象是 System.Char 对象的有序集合,用于表示字符串. 2. String 对象的值是该有序集合的内容,值不可变,所以String对象称为不可变的 string str1 = "3"+"b"; 这句话设计到1个Str

类库探源——System.Drawing.Bitmap

一.System.Drawing.Bitmap Bitmap 类: 封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素定义的图像的对象 命名空间: System.Drawing 程序集:   System.Drawing.dll 继承关系: 原型定义: [SerializableAttribute] [ComVisibleAttribute(true)] public sealed class Bitmap : Image 备注:GDI+ 支持下列文件格式

类库探源——System.ValueType

一.MSDN描述 ValueType 类:提供值类型的基类 命名空间: System 程序集:   mscorlib.dll 继承关系: 值类型包括:字符.整数.浮点.布尔.枚举.结构(其实字符.整数.浮点.布尔是结构,下面会说明) 二.值类型花名册 1. 字符 Char 结构: 表示一个 Unicode 字符. 命名空间:   System 程序集   : mscorlib.dll 原型定义: [SerializableAttribute] [ComVisibleAttribute(true)

类库探源——System.Environment

Environment 类: 提供有关当前环境和平台的信息以及操作它们的方法.此类不能被继承. 命名空间: System 程序集:   mscorlib.dll 继承关系: 常用属性(字段)和方法: CurrentDirectory      获取或设置当前工作目录的完全限定路径 OSVersion             获取包含当前平台标识符和版本号的 OperatingSystem 对象. GetLogicalDrives      返回包含当前计算机中的逻辑驱动器名称的字符串数组. Ge

类库探源——System.Drawing

一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.Drawing.Imaging 和 System.Drawing.Text 命名空间 程序集: System.Drawing.dll 二.System.Drawing.Image 简述 Image 类:为源自 Bitmap 和 Metafile 的类提供功能的抽象基类 命名空间: System.Dra

类库探源——System.Math 和 Random

一.System.Math Math类:为三角函数.对数函数和其他通用数学函数提供常数和静态方法 命名空间: System 程序集 :   mscorlib.dll 继承关系: 常用属性: Math.E     表示自然对数的底(e) Math.PI    圆周率(π) 常用方法: Math.Abs(整数.浮点数)                绝对值 Math.Sin                                    正弦 Math.Cos                

解读ASP.NET 5 &amp; MVC6系列(5):Configuration配置信息管理

解读ASP.NET 5 & MVC6系列(5):Configuration配置信息管理 2015-05-18 07:44 by 汤姆大叔, 7103 阅读, 18 评论, 收藏, 编辑 在前面的章节中,我们知道新版的MVC程序抛弃了原来的web.config文件机制,取而代替的是config.json,今天我们就来深入研究一下配置文件的相关内容. 基本用法 新版的配置信息机制在Microsoft.Framework.ConfigurationModel命名空间下进行了重写,重写以后不仅支持XML