类库探源——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
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup> <connectionStrings>
<add name="KKSEntities" connectionString="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string="data source=XXX.XXX.XXX.XXX;initial catalog=KKS;user id=XXXX;password=KKKKK;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings> <appSettings>
<add key="Aphasia" value="www.cnblogs.com/Aphasia"/>
</appSettings>
</configuration>
Program.cs
using System;
using System.Configuration; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string web = ConfigurationManager.AppSettings["Aphasia"];
Console.WriteLine(web); string cnstr = ConfigurationManager.ConnectionStrings["KKSEntities"].ConnectionString;
Console.WriteLine(cnstr); }
}
}
效果:

二、 自定义Section
app.config
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="ServicesSection" type="CustomDemo.ServicesSection,CustomDemo"/>
</configSections> <ServicesSection>
<services>
<add ServiceName="XXX服务1" Impl="XXX.Impl.XXXService1" Inter="XXX.Inter.XXXInter1" />
<add ServiceName="XXX服务2" Impl="XXX.Impl.XXXService2" Inter="XXX.Inter.XXXInter2" />
<add ServiceName="XXX服务3" Impl="XXX.Impl.XXXService3" Inter="XXX.Inter.XXXInter3" />
</services>
</ServicesSection> <startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
Program.cs
using System;
using System.Configuration; namespace CustomDemo
{
class Program
{
static void Main(string[] args)
{
ServicesSection myServices = ConfigurationManager.GetSection("ServicesSection") as ServicesSection;
foreach (Service item in myServices.ServiceItems)
{
Console.WriteLine("ServiceName:{0} Impl:{1} Inter:{2}", item.ServiceName, item.Impl, item.Inter);
}
}
} #region[自定义Section处理代码]
public class Service : ConfigurationElement
{
#region[当遇不能识别的元素时不让程序报错]
protected override bool OnDeserializeUnrecognizedAttribute(string name, string value)
{
return true;
}
protected override bool OnDeserializeUnrecognizedElement(string elementName, System.Xml.XmlReader reader)
{
return true;
}
#endregion #region[节点元素]
[ConfigurationProperty("ServiceName", IsRequired = true)]
public string ServiceName
{
get { return this["ServiceName"].ToString(); }
} [ConfigurationProperty("Impl", IsRequired = true)]
public string Impl
{
get { return this["Impl"].ToString(); }
} [ConfigurationProperty("Inter", IsRequired = true)]
public string Inter
{
get { return this["Inter"].ToString(); }
}
#endregion
} public class Services : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new Service();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((Service)element).ServiceName;
}
} public class ServicesSection : ConfigurationSection
{
[ConfigurationProperty("services", IsDefaultCollection = false)]
public Services ServiceItems { get { return (Services)base["services"]; } }
}
#endregion
}
效果:

本小节代码下载
三、参考资料
类库探源——System.Configuration 配置信息处理的更多相关文章
- 类库探源——System.Delegate
一.MSDN 描述 Delegate 类:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法.(是不是感觉很像C语言中的函数指针 :) ) 命名空间: System 程序集: ...
- 类库探源——System.Exception
一.MSDN描述 Exception 类: 表示在应用程序执行期间发生的错误 命名空间 : System 程序集: mscorlib.dll 继承关系: 常用属性(含字段)和方法: 1. 属性Me ...
- 类库探源——System.Type
一.MSDN 描述 Type 类:表示类型声明:类类型.接口类型.数组类型.值类型.枚举类型.类型参数.泛型类型定义.以及开放或封闭构造的泛型类型. 命名空间: System 程序集:mscorlib ...
- 类库探源——System.Drawing.Bitmap
一.System.Drawing.Bitmap Bitmap 类: 封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素定义的图像的对象 命名空间: System ...
- 类库探源——System.Drawing
一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.D ...
- 类库探源——System.Math 和 Random
一.System.Math Math类:为三角函数.对数函数和其他通用数学函数提供常数和静态方法 命名空间: System 程序集 : mscorlib.dll 继承关系: 常用属性: Math. ...
- 类库探源——System.ValueType
一.MSDN描述 ValueType 类:提供值类型的基类 命名空间: System 程序集: mscorlib.dll 继承关系: 值类型包括:字符.整数.浮点.布尔.枚举.结构(其实字符.整数 ...
- 类库探源——System.Environment
Environment 类: 提供有关当前环境和平台的信息以及操作它们的方法.此类不能被继承. 命名空间: System 程序集: mscorlib.dll 继承关系: 常用属性(字段)和方法: ...
- 类库探源——System.String
一.MSDN描述 String 类: 表示文本,即一系列的 Unicode 字符 命名空间 : System 程序集 : mscorlib.dll 继承关系: 备注: 1. 字符串是 Unicode ...
随机推荐
- (5)I2C总线的10bit地址以及通用广播地址
其实,10bit地址我没用过,通用广播地址更没用过.通用广播地址应该是在多个mcu之间用i2c进行通信时使用的.虽说没用到,但还是做了翻译,说不定以后有机会用到: 10bit地址 10bit的寻址扩展 ...
- git 版本历史
版本:git rev-parse --git-dir显示Git版本库的位置 --show-cdup显示当前工作区目录的深度 --parseopt解析命令行参数 $ git rev-parse - ...
- Com 笔记 -可连接对象
首先 两个概念: 1.入接口 :源对象提供给客户调用的. 2.出接口 :源对象通过此接口可直接或间接调用客户.类似delegate 对于实现了出接口的对象称为可连接对象. 对应每一个出接口,可连接对象 ...
- Spring笔记(三)AOP前篇之动态代理
AOP思想是将程序中的业务代码与服务代码进行分离,在运行时进行结合.比较强调程序的层次结构,是一种面向切面的编程.而在AOP实现的底层主要用到了动态代理,而动态代理又分为JDK动态代理和CGLIB动态 ...
- Centos环境下Tomcat启动缓慢
最近项目上线部署的时候,发现一个问题.Tomcat在启动过程中耗费了很长的时间.查看日志,发现耗时最长的地方是:INFO [localhost-startStop-1] org.apache.cata ...
- Filter 配置多个URL-PATTERN
Filter 配置多个URL-PATTERN 最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下 一.完全错误的方式 Java代码 <fil ...
- jpcap 配置方法,问题解决,模拟sniffer程序。(附JAVA程序,jar,dll包等环境)
博文链接 http://www.cnblogs.com/xckk/p/4609444.html 一. Eclipse环境下安装与配置Jpcap 相关源程序.jpcap jar包,dll包,帮助文档 ...
- Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》
(一)文件创建命令 1.touch命令 比如:touch abc命令在本地文件夹中创建了一个名为abc的空文件 2.cp命令 cp命令同意我们把一个文件的内容拷贝到同名或不同名的文件里,复制得到的文件 ...
- 【17】以独立语句将newed对象置入智能指针
1.为什么? 考虑下面的情况:方法声明为void processWidget(shared_ptr<Widget> pw,int priority). 调用方法 processWidget ...
- 三期_day12_其它+jetty的使用
1.大致总结 行程管理和留言反馈和前面的思路差点儿相同,这里就不多啰嗦了.经过十几天的写写停停.有了一个初步的进展了,再往下写也没有啥欲望了.还是研究下android和server,设计模式和网络这些 ...