博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#自定义ConfigSections节
阅读量:7255 次
发布时间:2019-06-29

本文共 4276 字,大约阅读时间需要 14 分钟。

在Net2.0以上的版本对自定义configSection是件相对容易的事情.

比如,我们要创建以下自定义的配置节ConfigSectionsLib
<configuration>
<configSections>
<section name="ConfigSectionsLib" type="ConfigSectionsLib.IPSection,ConfigSectionsLib"/>
</configSections>
<ConfigSectionsLib configSource="ConfigFiles\IPAllow.config" />
......
<configuration>
IPAllow.config文件结构如下:
<?xml version="1.0" encoding="utf-8" ?>
<ConfigSectionsLib>
<IPItemElement>
<IPItem Name="1" IP="192.168.1.1"></IPItem>
<IPItem Name="2" IP="192.168.1.2"></IPItem>
<IPItem Name="3" IP="192.168.1.3"></IPItem>
<IPItem Name="4" IP="192.168.1.4"></IPItem>
</IPItemElement>
</ConfigSectionsLib>
我们该如何开始呢,
首先应该建个项目(名称空间为ConfigSectionsLib,  DLL文件名:ConfigSectionsLib.dll)
创建类:IPSection 让它继承ConfigurationSection
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.ComponentModel;
namespace ConfigSectionsLib
{
public class IPSection : ConfigurationSection
{
/// <summary>
/// Gets the IPItemElement element.
/// </summary>
[ConfigurationProperty("IPItemElement")]
public IPItemElementCollection IPItems
{
get { return (IPItemElementCollection)this["IPItemElement"]; }
}
}
}
这代表我们要创建一个IPItems属性,这个属性是个IPItemElementCollection集合,它的定义在下面:
[ConfigurationCollection(typeof(IPItemElement), AddItemName = "IPItem", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class IPItemElementCollection : ConfigurationElementCollection
{
public IPItemElement this[int index]
{
get { return (IPItemElement)base.BaseGet(index); }
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
base.BaseAdd(index, value);
}
}
public new IPItemElement this[string name]
{
get { return (IPItemElement)base.BaseGet(name); }
}
protected override ConfigurationElement CreateNewElement()
{
return new IPItemElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return (element as IPItemElement).Name;
}
public override ConfigurationElementCollectionType CollectionType
{
get { return ConfigurationElementCollectionType.BasicMap; }
}
protected override string ElementName
{
get { return "IPItem"; }
}
}
如果想创建跟appSettings和connectionStrings一样的配置节,就是由<add/>子节组成的配置节,
你可以这样定义IPItemElementCollection
[ConfigurationCollection(typeof(IPItemElement),  CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)]
public class IPItemElementCollection : ConfigurationElementCollection
{
public IPItemElement this[int index]
{
get { return (IPItemElement)base.BaseGet(index); }
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
base.BaseAdd(index, value);
}
}
public new IPItemElement this[string name]
{
get { return (IPItemElement)base.BaseGet(name); }
}
protected override ConfigurationElement CreateNewElement()
{
return new IPItemElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return (element as IPItemElement).Name;
}
       // 将下面的注释
// public override ConfigurationElementCollectionType CollectionType
// {
//     get { return ConfigurationElementCollectionType.BasicMap; }
//  }
// protected override string ElementName
// {
//      get { return "IPItem"; }
//  }
}
这种形式的配置节将以以下的形式出现:
<ConfigSectionsLib>
<IPItemElement>
<Add Name="1" IP="192.168.1.1"></Add>
<Add Name="2" IP="192.168.1.2"></Add>
<Add Name="3" IP="192.168.1.3"></Add>
<Add Name="4" IP="192.168.1.4"></Add>
</IPItemElement>
</ConfigSectionsLib>
剩下的就是IPItemElement的定义:
public class IPItemElement : ConfigurationElement
{
[ConfigurationProperty("Name", DefaultValue = "")]
public string Name
{
get { return this["Name"] as string; }
}
[ConfigurationProperty("IP", DefaultValue = "")]
public string IP
{
get { return this["IP"] as string; }
}
}
这样就大功告成了,我们就可以写个类来封装对它的访问:
public class CustomIP
{
private string mName;
public string Name
{
get { return mName; }
set { mName = value; }
}
private string mIP;
public string IP
{
get { return mIP; }
set { mIP = value; }
}
}
public class SectionSetting
{
static IPSection ipSection = ConfigurationManager.GetSection("ConfigSectionsLib") as IPSection;
public static List<CustomIP> GetCustomIPList()
{
List<CustomIP> lst = new List<CustomIP>();
foreach (IPItemElement item in ipSection.IPItems)
{
CustomIP cip = new CustomIP();
cip.IP = item.IP;
cip.Name = item.Name;
lst.Add(cip);
}
//这边返回的就是所有子节的集合
return lst;
}
}

转载地址:http://ajkdm.baihongyu.com/

你可能感兴趣的文章
duilib : 滑动显示的窗口实现以及 悬浮窗 (转载)
查看>>
《Nginx文件类型错误解析漏洞--攻击演练》 (转)
查看>>
怎样用javascript获取UUID
查看>>
C# Like参数化 小记
查看>>
sublime text3 FTP直接上传
查看>>
【转载】关于RenderTarget的注意事项
查看>>
画图工具
查看>>
[WIFI] WIFI 破解(初级)
查看>>
CentOS 6.5 下安装 Redis 2.8.7
查看>>
Eclipse *的安装(图文详解)
查看>>
高性能图文混排框架,构架顺滑的iOS应用-b
查看>>
windows 下安装使用ipython
查看>>
苹果电脑macbook怎样强制关闭软件
查看>>
Linux下编译LibCURL
查看>>
错误提示:通过 Web 服务器的身份验证的用户无权打开文件系统上的文件
查看>>
python 取两数的百分比
查看>>
1-MSP430点亮一个灯
查看>>
Local System、Local Service與Network Service
查看>>
利用SQL语句查询数据库中所有表
查看>>
虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
查看>>