在Web.config或App.config中的添加自定义配置
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持。最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了。
如果你已经对自定义配置了如指掌,请忽略这篇文章。
言归正传,我们先来看一个最简单的自定义配置
<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="simple" type="ConfigExample.Configuration.SimpleSection,ConfigExample"/></configSections><simple maxValue="20" minValue="1"></simple> </configuration>
在配置文件中使用自定义配置,需要在configSections中添加一个section元素,并制定此section元素对应的类型和名字。然后再在configuration根节点下面添加此自定义配置,如上例中的simple节点。simple节点只有两个整形数的属性maxValue和minValue。
要在程序中使用自定义配置我们还需要实现存取这个配置块的类型,一般需要做如下三件事:
1. 定义类型从System.Configuration.ConfigurationSection继承
2. 定义配置类的属性,这些属性需要用ConfigurationProperty特性修饰,并制定属性在配置节中的名称和其他一些限制信息
3. 通过基类的string索引器实现属性的get ,set
非常简单和自然,如下是上面配置类的实现:
public class SimpleSection:System.Configuration.ConfigurationSection {[ConfigurationProperty("maxValue",IsRequired=false,DefaultValue=Int32.MaxValue)]public int MaxValue{get{return (int)base["maxValue"];}set{base["maxValue"] = value;}}[ConfigurationProperty("minValue",IsRequired=false,DefaultValue=1)]public int MinValue{get { return (int) base["minValue"];}set { base["minValue"] = value; }}[ConfigurationProperty("enabled",IsRequired=false,DefaultValue=true)]public bool Enable{get{return (bool)base["enabled"];}set{base["enabled"] = value;}} }
这样子一个简单的配置类就完成了,怎么在程序中使用这个配置呢?需要使用ConfigurationManager类(要引用System.configuration.dll这个dll只有在.Net2.0之后的版本中才有)的GetSection方法获得配置就可以了。如下代码:
SimpleSection simple = ConfigurationManager.GetSection("simple") as SimpleSection; Console.WriteLine("simple minValue={0} maxValue = {1}",simple.MinValue,simple.MaxValue);
这个配置类太过简陋了,可能有时候我们还需要更复杂的构造,比如在配置类中使用类表示一组数据,下面我们看一个稍微复杂一点的自定义配置
<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="complex" type="ConfigExample.Configuration.ComplexSection,ConfigExample"/></configSections><complex height="190"><child firstName="James" lastName="Bond"/></complex> </configuration>
这个配置的名字是complex,他有一个属性height,他的节点内还有一个child元素这个元素有两个属性firstName和lastName;对于这个内嵌的节点该如何实现呢?首先我们需要定义一个类,要从ConfigurationElement类继承,然后再用和SimpleSection类似的方法定义一些用ConfigurationProperty特性修饰的属性就可以了,当然属性值的get,set也要使用基类的索引器。如下实现:
public class ComplexSection : ConfigurationSection {[ConfigurationProperty("height", IsRequired = true)]public int Height{get{return (int)base["height"];}set{base["height"] = value;}}[ConfigurationProperty("child", IsDefaultCollection = false)]public ChildSection Child{get{return (ChildSection)base["child"];}set{base["child"] = value;}} }public class ChildSection : ConfigurationElement {[ConfigurationProperty("firstName", IsRequired = true, IsKey = true)]public string FirstName{get{return (string)base["firstName"];}set{base["firstName"] = value;}}[ConfigurationProperty("lastName", IsRequired = true)]public string LastName{get{return (string)base["lastName"];}set{base["lastName"] = value;}} }
还有稍微再复杂一点的情况,我们可能要在配置中配置一组相同类型的节点,也就是一组节点的集合。如下面的配置:
<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="complex" type="ConfigExample.Configuration.ComplexSection,ConfigExample"/></configSections><complex height="190"><child firstName="James" lastName="Bond"/><children><add firstName="Zhao" lastName="yukai"/><add firstName="Lee" lastName="yukai"/><remove firstName="Zhao"/></children></complex> </configuration>
请看children节点,它就是一个集合类,在它里面定义了一组add元素,也可以有remove节点把已经添进去的配置去掉。
要使用自定义节点集合需要从ConfigurationElementCollection类继承一个自定义类,然后要实现此类GetElementKey(ConfigurationElement element)和ConfigurationElement CreateNewElement()两个方法;为了方便的访问子节点可以在这个类里面定义只读的索引器。请看下面的实现
public class Children : ConfigurationElementCollection {protected override object GetElementKey(ConfigurationElement element){return ((ChildSection)element).FirstName;}protected override ConfigurationElement CreateNewElement(){return new ChildSection();}public ChildSection this[int i]{get{return (ChildSection)base.BaseGet(i);}}public ChildSection this[string key]{get{return (ChildSection)base.BaseGet(key);}}}
当然要使用此集合类我们必须在Complex类中添加一个此集合类的属性,并要指定集合类的元素类型等属性,如下:
[ConfigurationProperty("children", IsDefaultCollection = false)][ConfigurationCollection(typeof(ChildSection), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap, RemoveItemName = "remove")]public Children Children{get{return (Children)base["children"];}set{base["children"] = value;} }
我们会经常用到类似appSettings配置节的键值对的构造,这时候我们就不必再自己实现了,我们可以直接使用现有的System.Configuration.NameValueConfigurationCollection类来定义一个自定义的键值对。可以在Complex类中定义如下属性
[ConfigurationProperty("NVs", IsDefaultCollection = false)]public System.Configuration.NameValueConfigurationCollection NVs{get{return (NameValueConfigurationCollection)base["NVs"];}set{base["NVs"] = value;} }
然后在配置文件的complex节中添加键值对配置
<NVs><add name="abc" value="123"/><add name="abcd" value="12d3"/> </NVs>
到这儿已经基本上可以满足所有的配置需求了。不过还有一点更大但是不复杂的概念,就是sectionGroup。我们可以自定义SectionGroup,然后在sectionGroup中配置多个section;分组对于大的应用程序是很有意义的。
如下配置,配置了一个包含simple和一个complex两个section的sectionGroup
<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><sectionGroup type="ConfigExample.Configuration.SampleSectionGroup,ConfigExample" name="sampleGroup"><section type="ConfigExample.Configuration.SimpleSection,ConfigExample" allowDefinition="Everywhere" name="simple" /><section type="ConfigExample.Configuration.ComplexSection,ConfigExample" allowDefinition="Everywhere" name="complex"/></sectionGroup></configSections><sampleGroup><simple maxValue="20" minValue="1"></simple><complex height="190"><child firstName="James" lastName="Bond"/><children><add firstName="Zhao" lastName="yukai"/><add firstName="Lee" lastName="yukai"/><remove firstName="Zhao"/></children><NVs><add name="abc" value="123"/><add name="abcd" value="12d3"/></NVs></complex></sampleGroup> </configuration>
为了方便的存取sectionGroup中的section我们可以实现一个继承自System.Configuration.ConfigurationSectionGroup类的自定义类。实现很简单,就是通过基类的Sections[“sectionName”]索引器返回Section。如下:
public class SampleSectionGroup : System.Configuration.ConfigurationSectionGroup {public SimpleSection Simple{get{return (SimpleSection)base.Sections["simple"];}}public ComplexSection Complex{get{return (ComplexSection)base.Sections["complex"];}} }
在Web.config或App.config中的添加自定义配置相关推荐
- webconfig的解决方案怎么添加_解决在Web.config或App.config中添加自定义配置的方法详解...
文档从网络中收集,已重新整理排版 .word 版本可编辑 . 欢迎下载支持 . 1 word 版本可编辑 . 欢迎下载支持 . 解决在 Web.config 或 App.config 中添 加自定义配 ...
- 一个web.Config或app.Config自定义段configSections的示例
一个web.Config或app.Config自定义段configSections的示例 越来越觉得,直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml ...
- How to get Intellisense for Web.config and App.config in Visual Studio .NET?(转载)
下载:http://files.cnblogs.com/wujm/clrconfig.rar How to install Download the CLRconfigSchema.zip file ...
- 在.NET中从app.config或web.config读取设置
我正在使用一个C#类库,该类需要能够从web.config或app.config文件中读取设置(取决于DLL是从ASP.NET Web应用程序还是Windows Forms应用程序引用的). 我发现 ...
- C# 对WinForm应用程序的App.config的使用及加密
原文地址:http://blog.163.com/zhou_zzq/blog/static/1019622120137621739874/ 我们在写C#应用程序时,在工程文件中放置一个app.conf ...
- 在部署 C#项目时转换 App.config 配置文件
问题 部署项目时,常常需要根据不同的环境使用不同的配置文件.例如,在部署网站时可能希望禁用调试选项,并更改连接字符串以使其指向不同的数据库.在创建 Web 项目时,Visual Studio 自动生成 ...
- VisualStudio App.Config自动配置
在VisualStudio中,可以跟据选定的运行模式自动生成相应的配置文件: 对web类型的项目,系统已自动有了Web.config.Web.Debug.config.Web.release.conf ...
- 读取并修改App.config文件(转载)
1. 向项目添加app.config文件: 右击项目名称,选择"添加"→"添加新建项",在出现的"添加新项"对话框中,选择"添加应 ...
- App.Config详解
App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序. 配置文件的根节点是 ...
最新文章
- python简单入门代码-Python入门 | IDLE的介绍和使用方法
- 【Android 界面效果9】9patch图片
- 前端每日实战:140# 视频演示如何用纯 CSS 创作文本的淡入动画效果
- 第一阶段_第三部分_光照与GI
- hdu 2709 递推
- Angular 动态控制 aside 标签显示和隐藏的一个例子
- python选择排序从大到小_Python实现选择排序
- SSH框架hibernate无法添加或修改,saveorupdate方法失效
- WampServer2.0的Apache的service无法启动的解决方法
- 中国双层超级电容器市场趋势报告、技术动态创新及市场预测
- 计算机上怎么带源地址ping,怎么带源地址去ping服务器
- 面试准备JSONP(一)
- Php的入栈,PHP实现的栈数据结构示例【入栈、出栈、遍历栈】
- 尚硅谷官网MySQL笔记
- 如何查看Tomcat版本信息
- 基于树莓派的语音机器人
- c语言课程设计报告 数独,C语言课程设计报告数独.pdf
- 2021年T电梯修理考试题及T电梯修理模拟考试题
- 淘宝数据可视化大屏案例(Hadoop实验)
- 升级安装win11 22H2(跳过TPM和CPU等检测)