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

本文共 4342 字,大约阅读时间需要 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;
}
}

转载于:https://www.cnblogs.com/Kazaf/archive/2013/06/14/3135533.html

你可能感兴趣的文章
Zend Framework 自动加载类的实现方法
查看>>
7月24日云栖精选夜读:未来的超级智能网络攻击需要AI竞技俱乐部来拯救
查看>>
Cloudera携手CenturyLink提供大数据即服务
查看>>
所有代码都需要单元测试覆盖吗?
查看>>
如何创建线程
查看>>
Eclipse搭建Android ADT+SDK+AVD
查看>>
《Android传感器开发与智能设备案例实战》——第2章,第2.1节安装Android SDK的系统要求...
查看>>
《树莓派Python编程入门与实战(第2版)》——3.8 使用适当的工具
查看>>
《Python游戏编程入门》——导读
查看>>
《软件工程(第4版?修订版)》—第1章1.11节本章对单个开发人员的意义
查看>>
Java IO: RandomAccessFile
查看>>
JUC ArrayBlockingQueue
查看>>
Design Pattern: Builder 模式
查看>>
众推项目的文档分享流程
查看>>
微信公众号登录授权
查看>>
小白,你凭什么学习Linux云计算运维
查看>>
sed介绍与用法
查看>>
内容中台的内容理解与应用
查看>>
centos 7中的文本处理工具sed命令的使用
查看>>
内存卡格式化了怎么恢复?就是这么方便
查看>>