相信大家在日常的开发工作中遇到过这样那样的信息需要通过配置文件来保存,避免对该信息的修改导致程序的重新编译,而且现在越来越多的系统开始大量使用配置文件的方式部署应用。
     我这里就简单地把.net下日常用的配置方式例举一下,如有不全,还望指出!
     归纳起来.net下常用的自定义配置有4种方式,如下配置文件:
    

自定义应用程序配置全攻略<?xml version="1.0" encoding="utf-8" ?>
自定义应用程序配置全攻略  
<configuration>
自定义应用程序配置全攻略    
<configSections>
自定义应用程序配置全攻略        
<section name="Test1" type="System.Configuration.SingleTagSectionHandler"/>
自定义应用程序配置全攻略        
<section name="Test2" type="System.Configuration.DictionarySectionHandler"/>
自定义应用程序配置全攻略        
<section name="Test3" type="System.Configuration.NameValueSectionHandler" />
自定义应用程序配置全攻略          
<section name="Test4" type="MyNameSpace.CustomerSectionHandler" />
自定义应用程序配置全攻略    
</configSections>
自定义应用程序配置全攻略    
自定义应用程序配置全攻略    
<Test1 setting1="Hello" setting2="World"/>
自定义应用程序配置全攻略    
<Test2>
自定义应用程序配置全攻略        
<add key="Hello" value="World" />
自定义应用程序配置全攻略    
</Test2>
自定义应用程序配置全攻略    
<Test3>
自定义应用程序配置全攻略        
<add key="Hello" value="World" />
自定义应用程序配置全攻略    
</Test3>  
自定义应用程序配置全攻略        
自定义应用程序配置全攻略       
<Test4 type="Test.Config.Person,Test.Config">
自定义应用程序配置全攻略        
<Name>james</Name>
自定义应用程序配置全攻略           
<Age></Age>
自定义应用程序配置全攻略           
<Other></Other>
自定义应用程序配置全攻略    
</Test4>
自定义应用程序配置全攻略
</configuration>
自定义应用程序配置全攻略
自定义应用程序配置全攻略


    对于自定义配置节的使用,我们会首先在<configSections>节点下定义它,然后就可以在</configuration>节点下使用了,其中每一个自定义的配置节需要一个<section>,name属性是配置节的名称,type是处理该配置节的处理器,负责解析该配置节。下面就是所配置的配置节的主体信息:
       Test1 具有单个节点,可以在其中增加多个属性
       Test2 可以定义字典方式的配置信息,可以在它的下面增加任意多个<add key="Hello" value="World" />
       Test3 可以定义多个名称--值对
       Test4 则可以定义自定义信息
     

下面是访问这三个配置节的代码:

自定义应用程序配置全攻略            //访问配置节Test1
自定义应用程序配置全攻略
            IDictionary IDTest1 = (IDictionary)ConfigurationSettings.GetConfig("Test1");
自定义应用程序配置全攻略            
string str = (string)IDTest1["setting1"+" "+(string)IDTest1["setting2"];
自定义应用程序配置全攻略            MessageBox.Show(str);        
//输出Hello World
自定义应用程序配置全攻略
自定义应用程序配置全攻略            
//访问配置节Test1的方法2
自定义应用程序配置全攻略
            string[] values1=new string[IDTest1.Count];
自定义应用程序配置全攻略            IDTest1.Values.CopyTo(values1,
0);
自定义应用程序配置全攻略            MessageBox.Show(values1[
0]+" "+values1[1]);    //输出Hello World
自定义应用程序配置全攻略            
自定义应用程序配置全攻略            
//访问配置节Test2
自定义应用程序配置全攻略
            IDictionary IDTest2 = (IDictionary)ConfigurationSettings.GetConfig("Test2");
自定义应用程序配置全攻略            
string[] keys=new string[IDTest2.Keys.Count];
自定义应用程序配置全攻略            
string[] values=new string[IDTest2.Keys.Count];
自定义应用程序配置全攻略            IDTest2.Keys.CopyTo(keys,
0);
自定义应用程序配置全攻略            IDTest2.Values.CopyTo(values,
0);
自定义应用程序配置全攻略            MessageBox.Show(keys[
0]+" "+values[0]);
自定义应用程序配置全攻略            
自定义应用程序配置全攻略            
//访问配置节Test3
自定义应用程序配置全攻略
            NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3");
自定义应用程序配置全攻略            MessageBox.Show(nc.AllKeys[
0].ToString()+" "+nc["Hello"]);    //输出Hello World
               
                //访问节点test4 ,  Person是一个自定义类型
                Person  per = (Person)ConfigurationSettings.GetConfig("Test4");
                MessageBox.Show("Name:"+per.Name+"\r\nAge:"+per.Age);
               自定义应用程序配置全攻略

 4个获取配置的方法都用到了ConfigurationSettings.GetConfig(string  str),但是他们的返回却是不同的,这是为什么呢?其实每个GetConfig方法的调用都会去使用配置文件中配置的Handler来解析相应的配置节,

配置节处理程序

返回类型

SingleTagSectionHandler

Systems.Collections.IDictionary

DictionarySectionHandler

Systems.Collections.IDictionary

NameValueSectionHandler

Systems.Collections.Specialized.NameValueCollection

CustomerSectionHandler Person
从表中可以看出,前3个配置节使用了系统定义的Handle,最后一个使用了自定义的Handler,每个Handler要求必须实现IConfigurationSectionHandler接口,自定义Handler的实现如下

自定义应用程序配置全攻略using System;
自定义应用程序配置全攻略
using System.Xml;
自定义应用程序配置全攻略
using System.Xml.XPath;
自定义应用程序配置全攻略
using System.Xml.Serialization;
自定义应用程序配置全攻略
using System.Configuration;
自定义应用程序配置全攻略
自定义应用程序配置全攻略
namespace Newegg.USPS.ConfigSectionHandler

  该接口只有一个方法Create,该方法将配置节中的内容反序列化到指定的类中,这里是Person类,所以有了这个接口,我们可以定义任何的自定义类型到配置文件中,很方便的。  

当然,配置节组是使用<sectionGroup>元素,将类似的配置节分到同一个组中。配置节组声明部分将创建配置节的包含元素,在<configSections>元素中声明配置节组,并将属于该组的节置于<sectionGroup>元素中。下面是一个包含配置节组的配置文件的例子:

自定义应用程序配置全攻略<?xml version="1.0" encoding="utf-8" ?>
自定义应用程序配置全攻略
<configuration>
自定义应用程序配置全攻略    
<configSections>
自定义应用程序配置全攻略        
<sectionGroup name="TestGroup">
自定义应用程序配置全攻略            
<section name="Test" type="System.Configuration.NameValueSectionHandler"/>
自定义应用程序配置全攻略        
</sectionGroup>
自定义应用程序配置全攻略    
</configSections>
自定义应用程序配置全攻略    
自定义应用程序配置全攻略    
<TestGroup>
自定义应用程序配置全攻略        
<Test>
自定义应用程序配置全攻略            
<add key="Hello" value="World"/>
自定义应用程序配置全攻略        
</Test>
自定义应用程序配置全攻略    
</TestGroup>
自定义应用程序配置全攻略
</configuration>

 

自定义应用程序配置全攻略<?xml version="1.0" encoding="utf-8" ?>
自定义应用程序配置全攻略
<configuration>
自定义应用程序配置全攻略    
<configSections>
自定义应用程序配置全攻略        
<sectionGroup name="TestGroup">
自定义应用程序配置全攻略            
<section name="Test" type="System.Configuration.NameValueSectionHandler"/>
自定义应用程序配置全攻略        
</sectionGroup>
自定义应用程序配置全攻略    
</configSections>
自定义应用程序配置全攻略    
自定义应用程序配置全攻略    
<TestGroup>
自定义应用程序配置全攻略        
<Test>
自定义应用程序配置全攻略            
<add key="Hello" value="World"/>
自定义应用程序配置全攻略        
</Test>
自定义应用程序配置全攻略    
</TestGroup>
自定义应用程序配置全攻略
</configuration>

 

自定义应用程序配置全攻略<?xml version="1.0" encoding="utf-8" ?>
自定义应用程序配置全攻略
<configuration>
自定义应用程序配置全攻略    
<configSections>
自定义应用程序配置全攻略        
<sectionGroup name="TestGroup">
自定义应用程序配置全攻略            
<section name="Test" type="System.Configuration.NameValueSectionHandler"/>
自定义应用程序配置全攻略        
</sectionGroup>
自定义应用程序配置全攻略    
</configSections>
自定义应用程序配置全攻略    
自定义应用程序配置全攻略    
<TestGroup>
自定义应用程序配置全攻略        
<Test>
自定义应用程序配置全攻略            
<add key="Hello" value="World"/>
自定义应用程序配置全攻略        
</Test>
自定义应用程序配置全攻略    
</TestGroup>
自定义应用程序配置全攻略
</configuration>

 

自定义应用程序配置全攻略<?xml version="1.0" encoding="utf-8"?>
自定义应用程序配置全攻略
<configuration>
自定义应用程序配置全攻略    
<appSettings>
自定义应用程序配置全攻略        
<add key="connectionstring" value="User ID=sa;Data Source=.;Password=;Initial Catalog=test;Provider=SQLOLEDB.1;" />
自定义应用程序配置全攻略        
<add key="TemplatePATH" value="Template" />
自定义应用程序配置全攻略    
</appSettings>
自定义应用程序配置全攻略
</configuration>
自定义应用程序配置全攻略

 

相关文章: