近期工作太忙了,都没有时间上上博客,生活所困,得工作呀,相信很多人都是这样。
近期由于项目对配置文件的操作多了,原来参考网络的同僚思想写了个读和写配置的类,但都是针对appSettings 节点,对配置节没有更多的实现,但很多项目如果配置的内容多了,以配置节来分类比较清晰(有很多配置直接使用XML,但我还是偏好Frameword带schema的config文件)。现在写下自己的实现,以方便大家参考(此处的配置文件是指独立的config文件,不是App.config文件)。
1、扩展Configuration类的功能。些功能使用Framework的扩展方法,使用起来更象是Configuration的功能一样。扩展方法不是本文件要介绍的内容。
命名空间:namespace System.Configuration
和Configuration的命名空间相同,虽然有时忘记引入该扩展类所在的程序集,以导致扩展方法不知道在哪里,但本人觉得使用相同的命名空间,更加似Configuration的功能。
类名:public static class ConfigurationExtensions 扩展方法得使用静态类。
2、实现:在网上,有位仁兄使用自定义一个Section节来实现NameValue的做法,虽然的可行,但在配置节的设置上得带有自己的程序集的限定名等,本人不喜欢,Framework都有NameValeElement 和 KeyValueElement等的定义,相似的做法,我们又何必多些一番工作!不过还多谢哪位高手的代码,做了不少参考。(本人发觉Microsoft随着新版本的更新,以前很多可以直接操作其本框架的功能都被屏蔽了,不知道是否制约做IDE工具的开源框架,以减少对VS的竞争的原因吧)。还有位高手直接通过XMLDocumet来操作,应该也不是好的解决方案。
扩展Configuration的功能
获取连接字符串


/// <param name="connectionName"> 连接串的 </param>
/// <param name="config"></param>
/// <returns></returns>
public static string GetConnectionStringsConfig( this Configuration config, string connectionName)
{
string connectionString = config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString;
/// /Console.WriteLine(connectionString);
return connectionString;
}
更新连接字符串


/// 更新连接字符串
/// </summary>
/// <param name="newName"> 连接字符串名称 </param>
/// <param name="newConString"> 连接字符串内容 </param>
/// <param name="newProviderName"> 数据提供程序名称 </param>
/// <param name="config"> Configuration实例 </param>
public static void UpdateConnectionStringsConfig( this Configuration config, string newName, string newConString, string newProviderName)
{
bool isModified = false;
// 记录该连接串是否已经存在
// 如果要更改的连接串已经存在
if (config.ConnectionStrings.ConnectionStrings[newName] != null)
{ isModified = true; }
// 新建一个连接字符串实例
ConnectionStringSettings mySettings = new ConnectionStringSettings(newName, newConString, newProviderName);
// 如果连接串已存在,首先删除它
if (isModified)
{
config.ConnectionStrings.ConnectionStrings.Remove(newName);
}
// 将新的连接串添加到配置文件中.
config.ConnectionStrings.ConnectionStrings.Add(mySettings);
// 保存对配置文件所作的更改
config.Save(ConfigurationSaveMode.Modified);
}
获取appSettings配置节的value项


/// 返回config文件中appSettings配置节的value项
/// </summary>
/// <param name="strKey"></param>
/// <param name="config"> Configuration实例 </param>
/// <returns></returns>
public static string GetAppSettingsItemValue( this Configuration config, string strKey)
{
foreach (KeyValueConfigurationElement key in config.AppSettings.Settings)
{
if (key.Key == strKey)
{
return config.AppSettings.Settings[strKey].Value;
}
}
return string.Empty;
}
获取所有的appSettings的节点

