2013年10月21日星期一

C#在App.config中自定义节点的设置与读取实例

我们往往需要在App.config中自定义一些节来满足实际需要,而不依赖于App.config的appSettings,下面通过一个简单的实例来说明自定义配置节点的设置与读取(该实例抽取于FTP上传程序)。

在App.config配置文件中使用自定义配置,需要在configSections中添加一个section元素,并指定此section元素对应的名字和类型,然后再在configuration根节点下面添加此自定义配置节。

1、我们在App.config中添加如下的自定义节点(配置了一组相同类型的节点,用于上传文件目录,FTP服务器地址及登陆信息):




D:\ABC\1\
D:\ABC\
ftp://10.1.1.2
user
1234


D:\ABC\2\
D:\ABC\
ftp://10.1.1.3
user
1234


D:\ABC\3\
D:\ABC\
ftp://10.1.1.4
user
1234



2、然后在App.config的configSections中添加section元素(section 元素将配置节处理程序与配置元素或节关联)(其中name为自定义节点的名称,type为自定义节点解析文件的命名空间和自定义节处理程序的类名)





3、创建自定义配置节处理程序,节处理程序用来解释并处理 Web.config 文件特定部分中 XML 配置元素中定义的设置,并根据配置设置返回适当的配置对象。使用该配置对象,以对自定义配置元素进行读取和写入。新建名为DZConfig.cs的文件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Configuration;
using System.Collections;


namespace FTP_SendServices
{
public class DZConfigSection
{
DZConfigSection() { }
#region 属性定义

private string _FilePath;
private string _LogPath;
private string _uploadUrl;
private string _userName;
private string _passWord;

public string FilePath
{
get { return _FilePath; }
set { _FilePath = value; }
}

public string LogPath
{
get { return _LogPath; }
set { _LogPath = value; }
}

public string uploadUrl
{
get { return _uploadUrl; }
set { _uploadUrl = value; }
}


public string userName
{
get { return _userName; }
set { _userName = value; }
}

public string passWord
{
get { return _passWord; }
set { _passWord = value; }
}



#endregion


public DZConfigSection(XmlNode AddressConfig)
{
XmlElement c = (XmlElement)AddressConfig;
_FilePath = c.SelectSingleNode("FilePath").InnerText;
_LogPath = c.SelectSingleNode("LogPath").InnerText;
_uploadUrl = c.SelectSingleNode("uploadUrl").InnerText;
_userName = c.SelectSingleNode("userName").InnerText;
_passWord = c.SelectSingleNode("passWord").InnerText;

}

}

//创建一个实现 System.Configuration.IConfigurationSectionHandler 接口的公共类。
public class ConvertCfgSectionHandler : IConfigurationSectionHandler
{
public ConvertCfgSectionHandler() { }
public object Create(object parent, object configContext, XmlNode section)
{
//添加您自己的代码,以执行所需的配置工作。
List _list = new List();
foreach (XmlNode AddressConfig in section.SelectNodes("//AddressConfig"))
{
DZConfigSection _DZConfig = new DZConfigSection(AddressConfig);
_list.Add(_DZConfig);
}
return _list;

}


}

public class DZConfig
{

public static List GetConfigList()
{

return (List)ConfigurationSettings.GetConfig("DZConfig");
}
}
}

4、在程序中使用配置节点信息。下面就是节点的读取,遍历整个自定义节点的数据:

List _ConfigList = DZConfig.GetConfigList();
foreach (DZConfigSection Config in _ConfigList)
{
LogPath =Config.LogPath + "log" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
FileHelper.WriteFile(LogPath, DateTime.Now.ToString() + "   数据发送功能启动!");
string dir = Config.FilePath;
string uploadUrl =Config.uploadUrl;
string userName = Config.userName;
string passWord = Config.passWord;
string[] files = Directory.GetFiles(dir);
}

1 条评论: