按照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="data source=XXX.XXX.XXX.XXX;initial catalog=KKS;user id=XXXX;password=KKKKK;multipleactiveresultsets=True;App=EntityFramework""
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
}
效果:
本小节代码 下载
三、参考资料

