• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中使用自定义配置

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

先来看一个常见的配置文件模板:

 

<configuration>
    
<configSections>    //配置节声明区域,包含配置节和命名空间声明
        
<section>              //配置节声明
            
<sectionGroup/>       //定义配置节组
        
</section>       //配置节组中的配置节声明
    
</configSections>
    
<appSettings/> //预定义配置节
    
<Custom element for configuration section>  //配置节设置区域
</configuration>

 

 

自定义配置可分为:自定义配置节和自定义配置节组。

 

1. 自定义配置节

要使用自定义配置需要修改两处地方,一是在<configSections/>中声明配置节,二是在<Custom element for configuration section>处设置配置节的具体配置。

声明配置节语法:

 

<section name="" type=""/>

 

<section>:声明新配置节

name:自定义配置节的名称

type:自定义配置节的类型,主要包括System.Configuration.SingleTagSectionHandler、System.Configuration.DictionarySectionHandler、System.Configuration.NameValueSectionHandler。

SingleTagSectionHandler 配置节返回类型为 Systems.Collections.IDictionary
DictionarySectionHandler 配置节返回类型为 Systems.Collections.IDictionary
NameValueSectionHandler 配置节返回类型为 Systems.Collections.Specialized.NameValueCollection

 

下面是一个完整的自定义配置节示例代码:

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<section name="UrlString" type="System.Configuration.SingleTagSectionHandler"/>
    
<section name="UrlString2" type="System.Configuration.DictionarySectionHandler"/>
  
</configSections>
  
<UrlString action="add" paramString="id=1"></UrlString>
  
<UrlString2>
    
<add key="add" value="id=1"/>
    
<add key="edit" value="id=2"/>
  
</UrlString2>
</configuration>

 

 程序中读取配置代码如下:

 

        static void Main(string[] args)
        {
            
//访问 UrlString 配置节
            IDictionary dict = ConfigurationManager.GetSection("UrlString"as IDictionary;
            Console.WriteLine(
string.Format("{0}?{1}", dict["action"], dict["paramString"]));

            
//访问 UrlString2 配置节
            IDictionary dict2 = ConfigurationManager.GetSection("UrlString2"as IDictionary;
            
foreach (DictionaryEntry e in dict2)
            {
                Console.WriteLine(
string.Format("{0}?{1}", e.Key, e.Value));
            }

            Console.Read();
        }

 

 

 

2. 自定义配置节组

配置节组是使用<sectionGroup>元素来声明,在配置节组中可以包括多个配置节<section>,如下:

 

<?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>

 

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

 

NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test");
MessageBox.Show(nc.AllKeys[
0].ToString()+" "+nc["Hello"]);    //输出Hello World

 

 

 

3. 通过 IConfigurationSectionHandler 接口实现自定义配置处理类

 IConfigurationSectionHandler 接口原型:

 

public interface IConfigurationSectionHandler
{
    Object Create(Object parent, Object configContext, XmlNode section)
}

 

Create 方法必须可由多个线程同时调用,即要保证线程安全。

 

示例代码:

 

    public class UrlString : IConfigurationSectionHandler
    {

        
private string _action;

        
public string Action
        {
            
get { return _action; }
            
set { _action = value; }
        }

        
private string _param;

        
public string Param
        {
            
get { return _param; }
            
set { _param = value; }
        }

        
#region IConfigurationSectionHandler 成员

        
public object Create(object parent, object configContext, XmlNode section)
        {
            Hashtable hashtable 
= new Hashtable();
            
foreach (XmlAttribute attribute in section.Attributes)
            {
                hashtable[attribute.Name] 
= attribute.Value;
            }
            
return hashtable;
        }

        
#endregion

        
public static UrlString Create()
        {
            UrlString us 
= new UrlString();
            Hashtable ht 
= ConfigurationManager.GetSection("UrlString"as Hashtable;
            us.Action 
= (string)ht["action"];
            us.Param 
= (string)ht["paramString"];
            
return us; 
        }
    }

 

 

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#开源系统大汇总发布时间:2022-07-14
下一篇:
在C#程序中模拟发送键盘按键消息发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap