在.NET 1.1下,你必须用过实现IConfigurationSectionHandler接口来进行操作。

但在.NET 2.0下,微软提供了一系列可以对配置文件进行操作的方法,而且非常强大,能够让你随便定义自己的配置节点。在开始之前我们先看看我们想写一个怎样的配置节:

  <configSections>
    <section name="MailSettings" type="MyBlog.MailSection, MyBlog" />
  </configSections>

这个地方指定了我们想要写一个MailSettings的节,后面的type标识将会使用MyBlog这个assembly理的MyBlog.MailSection类来识别这个section。

<MailSettings>
    <MailPlugins>
      <add name="Server" value="" />
      <add name="Title" value="" />
      <add name="Body" value="" />
    </MailPlugins>
  </MailSettings>

这个地方有是我们自定义的一些配置了,value就是我们所需要的一些值。

现在目标已经有了,下面就是怎么去用这些API来读出我们需要的值:

首先很自然我们需要MailSettings的这个section,于是我们定义类:

    public sealed class MailSection : ConfigurationSection
    {

    }

一个ConfigurationSection可以有自己的一些attribute,这些网上资料很多,我就不详解了。我关心的是下面的MailPlugins这层,这层在配置文件上被称为ConfigurationElementCollection,也就是一些ConfigurationElement的集合。那么我们先定义所需要的ConfigurationElement:

    public sealed class MailPluginElement : ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true, IsKey = true)]
        public string Name
        {
            get { return (string)this["name"]; }
            set { this["name"] = value; }
        }

        [ConfigurationProperty("value", IsRequired = true)]
        public string Value
        {
            get { return (string)this["value"]; }
            set { this["value"] = value; }
        }

    }

接着是定义这个ConfigurationElement的集合:

    public sealed class MailPluginElementCollection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new MailPluginElement();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((MailPluginElement)element).Name;
        }
    }

默认的抽象类是让我们必须override上面的两个保护方法。但是这样是不能满足我们的要求的,我们希望用add key 和 value这种形式来配置:

        public override ConfigurationElementCollectionType CollectionType
        {
            get
            {
                return ConfigurationElementCollectionType.AddRemoveClearMap;
            }
        }

这里相当重要!需要使用AddRemoveClearMap来确保配置处理节能够识别<add key="" value="" />,如果配置为别的会报给你add节无法识别的错误!

那么最后我们一个常用的功能没有提供:索引器!于是我们再加上:

        public MailPluginElement this[int index]
        {
            get { return BaseGet(index) as MailPluginElement; }
        }

        public new MailPluginElement this[string name]
        {
            get { return BaseGet(name) as MailPluginElement; }
        }

那么ConfigurationElementCollection告一段落了,现在就是把这些东西塞进ConfigurationSection了:

    public sealed class MailSection : ConfigurationSection
    {
        [ConfigurationProperty("MailPlugins")]
        public MailPluginElementCollection MailPlugins
        {
            get { return (MailPluginElementCollection)base["MailPlugins"]; }
        }
    }

注意这里的ConfigurationProperty这个Attribute,里面的字符串就是你在配置节里的那个element group节点。当然如果你想省事的话你可以定义为"",这样上面的配置文件就变为:

<MailSettings>
      <add name="Server" value="" />
      <add name="Title" value="" />
      <add name="Body" value="" />
  </MailSettings>

最后便是如何使用了:

        public string GetConfigValue(string name)
        {
            MailSection mailSection = System.Configuration.ConfigurationManager.GetSection("MailSettings") as MailSection;

            MailPluginElementCollection mailInfos = mailSection.MailPlugins;

            return mailInfos[name].Value;
        }

转载于:https://www.cnblogs.com/gamix/archive/2007/01/29/633403.html

使用ConfigurationManager来写自己的配置文件相关推荐

  1. python创建配置文件_如何写python的配置文件

    一.创建配置文件 在D盘建立一个配置文件,名字为:test.ini 内容如下: [baseconf] host=127.0.0.1 port=3306 user=root password=root ...

  2. python怎么创建配置文件_如何写python的配置文件

    一.创建配置文件 在D盘建立一个配置文件,名字为:test.ini 内容如下: [baseconf] host=127.0.0.1 port=3306 user=root password=root ...

  3. 项目管理sod_将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介

    可以参考作者的<SOD框架"企业级"应用数据架构实战>了解本文相关的内容. 引言 今天看到一片热门的博客, .NET高级工程师面试题之SQL篇 ,要求找出每一个系的最高 ...

  4. php自己写配置项,创建配置文件 用PHP写出自己的BLOG系统 2

    先看看效果图 创建前文件界面 创建配置文件后界面,会提示不能重复安装 下面就上代码吧,html界面的代码就不上了,直接上PHP代码吧 复制代码代码如下: /* FILE:install.php Aut ...

  5. 易语言写c盘配置文件,易语言写配置文件的方法

    易语言编程开发环境的诞生引领了一个编程新时代的到来.它以其本土化.易用化.开发速度快等优点迅速被广大编程爱好者所认可和接受."配置文件"这个术语相信大家都很熟悉了,因为日常生活中随 ...

  6. springboot 两个src_springboot application.properties 写多个配置文件怎么写

    展开全部 springboot application.properties 写多32313133353236313431303231363533e78988e69d8331333365643661个 ...

  7. 易语言写c盘配置文件,易语言 读写配置项(ini配置文件)源码

    简介 易语言 读写配置项(ini配置文件)源码 源码 .版本 2 .支持库 iext .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 .局部变量 账号, 文本型 .局部变量 密码, 文本型 ...

  8. WinForm 读写配置文件

    读配置文件 方法(1) //ConfigurationManager.RefreshSection("appSettings"); string settingValue = Co ...

  9. 重构机房收费系统总结1之配置文件+反射+抽象工厂

    在重构机房收费系统之前就一直听说这次重构要用反射+配置文件.深远的作用不知道,可是在这次重构用到,目的还是挺明白的:就是为了更换数据时方便,遵循开放-封闭原则.攻克了可维护和可扩展的问题. 以下就以机 ...

  10. .Net Core 全局配置读取管理方法 ConfigurationManager

    最近在学习.Net Core的过程中,发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了. 也能理解.Core中使用的配置文件全是Json,不像F ...

最新文章

  1. vsftp 550,227 报错解决
  2. Mysql找不到mysql.sock怎么办?
  3. 编写一个程序实现方法的覆盖java_编写Java程序代码必须先声明一个____,然后在其中编写实现需求的业务代码。...
  4. 省选+NOI 第八部分 数论
  5. linux PCI驱动调用字符设备驱动方式
  6. 线程堆栈大小 pthread_attr_setstacksize 的使用【原创】
  7. 面试官:Object o = new Object() 占用了多少字节?
  8. 在Ubuntu 18.04上安装MongoDB
  9. 数据结构与算法--图的概念
  10. VC 2010 Express下安装OpenCV2.4.4 遇到的问题
  11. 【EF】EF框架 Code First Fluent API
  12. 【HDU - 4794】Arnold【斐波那契数列循环节】
  13. 计算机应用离散数学,结合计算机应用的离散数学教学研究.pdf
  14. Python学习笔记—— python基础 1. 变量的输出
  15. 分布式 | zabbix 监控 dble
  16. matlab 三维图像 叠加,利用 Matlab构建“波的叠加”图样
  17. 使用putty下载文件
  18. spark sql 之 collect_set collect_list 后WrappedArray 取值
  19. 15 python的文件操作
  20. 元器件的温度特性(电容、电感、晶振等)

热门文章

  1. java如何代码生成矩形_Java中能不能创建不是矩形的窗口。
  2. 设计模式之GOF23外观模式
  3. java 解压文件夹_java新人,在学习解压缩文件时,解压文件后,里面的文件变文件夹...
  4. 解决wordpress前后台非常卡的几个方法
  5. php 面向对象编程(class)之从入门到崩溃 高级篇
  6. 规则引擎drools java,spring,spring-boot,drools使用案例
  7. ubuntu 20 /CentOS 8.x/MAC 系统 中安装GO LANG(GO语言)
  8. ChannelHandler 接口继承关系图
  9. Android 控件 之 Adapter 基础讲解
  10. java中eq、ne、gt、lt、ge、le分别代表含义