基础知识---应用程序配置文件(将section转换成对象一)
System.Configuration.ConfigurationManager.GetSection方法,其作用是检索当前应用程序默认配置的指定配置节。
这是一个令人兴奋的方法,原因是,他的返回值是一个对象。他从应用程序配置文件中将指定的配置节的内容读取出来,为我们创建新的实例后映射到相应的属性。
看看这个简单的应用程序配置文件:
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <configSections>
4 <section name="ConfigurationOne" type="Configuration.UserInfo, Configuration"/>
5 </configSections>
6 <ConfigurationOne Handle="1" Name="Gene" />
7</configuration>
2 <configuration>
3 <configSections>
4 <section name="ConfigurationOne" type="Configuration.UserInfo, Configuration"/>
5 </configSections>
6 <ConfigurationOne Handle="1" Name="Gene" />
section 中的type属性,指定了配置节转换的类型。 UserInfo需要实现一个叫作:IConfigurationSectionHandler的接口。如下代码所示:
1 public class UserInfo : IConfigurationSectionHandler
2 {
3 public int Handle { get; set; }
4 public string Name { get; set; }
5
6 public object Create(object parent, object configContext, System.Xml.XmlNode section)
7 {
8 this.Handle = int.Parse(section.Attributes["Handle"].Value);
9 this.Name = section.Attributes["Name"].Value;
10
11 return this;
12 }
13 }
3 public int Handle { get; set; }
4 public string Name { get; set; }
5
6 public object Create(object parent, object configContext, System.Xml.XmlNode section)
7 {
8 this.Handle = int.Parse(section.Attributes["Handle"].Value);
9 this.Name = section.Attributes["Name"].Value;
10
11 return this;
12 }
13 }
Create方法,是接口IConfigurationSectionHandler定义的,用于向当前实例填充数据。所有的数据都在section中。
通过以上两步,我们就可以在需要的时候调用 System.Configuration.ConfigurationManager.GetSection方法获取取UserInfo的对象。该方法的返回值,官方文档中建议强制转换为期望的配置类型。 并且为了避免可能出现的强制转换异常,需要使用条件强制转换运算,例如 C# 中的 as 运算符。如下代码所示:
1 static void Main(string[] args)
2 {
3 UserInfo user =
4 System.Configuration.ConfigurationManager.GetSection("ConfigurationOne") as UserInfo;
5
6 if (user != null)
7 {
8 Console.WriteLine(string.Format("UserInfo: Handle = {0}; Name = {1};",
9 user.Handle, user.Name));
10 }
11
12 Console.ReadLine();
13 }
2 {
3 UserInfo user =
4 System.Configuration.ConfigurationManager.GetSection("ConfigurationOne") as UserInfo;
5
6 if (user != null)
7 {
8 Console.WriteLine(string.Format("UserInfo: Handle = {0}; Name = {1};",
9 user.Handle, user.Name));
10 }
11
12 Console.ReadLine();
13 }