首页 > 代码库 > 类库探源——System.Configuration 配置信息处理

类库探源——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>
View Code

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 }
View Code

效果:

技术分享

 

二、 自定义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>
View Code

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 : ConfigurationElement20     {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         #endregion31 32         #region[节点元素]33         [ConfigurationProperty("ServiceName", IsRequired = true)]34         public string ServiceName35         {36             get { return this["ServiceName"].ToString(); }37         }38 39         [ConfigurationProperty("Impl", IsRequired = true)]40         public string Impl41         {42             get { return this["Impl"].ToString(); }43         }44 45         [ConfigurationProperty("Inter", IsRequired = true)]46         public string Inter47         {48             get { return this["Inter"].ToString(); }49         }50         #endregion51     }52 53     public class Services : ConfigurationElementCollection54     {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 : ConfigurationSection66     {67         [ConfigurationProperty("services", IsDefaultCollection = false)]68         public Services ServiceItems { get { return (Services)base["services"]; } }69     }70     #endregion71 }
View Code

效果:

技术分享

本小节代码下载

 

三、参考资料

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

 

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