转载:http://www.educity.cn/develop/495003.html

在.Net应用程序中我们经常看到VS为我们生成的项目工程中都会含有app.config或者web.connfig这样的文件.这个文件就是我们所说的应用程序配置文件.在这个文件里面记述着一些与我们的应用程序相关的信息如数据库连接认证模式等我们在程序中可以利用ConfigurationManager的ConnectionStrings属性方便的获取配置文件中的数据库连接字符串信息。

可是有时候我们需要对它进行一些扩展加入一些自定义的元素而不是仅仅使用默认的配置.例如我们可能需要在程序启动时动态的加载某个类并对其进行初始化,而这个类或者初始化数据是我们在程序设计的时候所不知道的.相信大家都碰到过这样的问题,这里就不做过多的解释了.最好的办法无非就是把这些可能会改变的东西写进配置文件里面,到你能够确定的时候你只需要修改配置文件就Ok了,而不是产品马上上线的时候还用秒钟打开VS去改代码。

添加一些自定义的元素到配置文件中是很容易的只需要两步就能搞定:

1、 在<configSections>节点中注册你所要定义的节点名称及用于处理该节点的配置节处理程序代码如下:

   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <configuration>
   3:    <configSections>
   4:      <section name="dbFactory"
   5:               type ="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration" />
   6:    </configSections>
   7:  </configuration>
   1:  <?xml version="1.0" encoding="utf-8" ?>
   2:  <configuration>
   3:    <configSections>
   4:      <section name="dbFactory"
   5:               type ="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration" />
   6:    </configSections>
   7:   
   8:    <dbFactory >
   9:      <default factory="sql"></default>
  10:      <factorys>
  11:        <add name="sql"  assembly="HelloData"  class="SqlDbFactory" />
  12:        <add name="oracle" assembly="HelloData" class="OracleDbFactory" />        
  13:      </factorys>      
  14:    </dbFactory>
  15:  </configuration>

自定义节点算是添加完了,可是我们怎么在程序里面获取这些配置信息呢?相信大家很多都是玩XML的高手,用SystemXml下的一些类写个XML的解析类把我们自定义的节点信息解析出来不就得到我们想要的东西了吗?的确是这样大牛果然是大牛小弟实在是佩服!可是如果用这种方式来实现的话小弟就实在没有必要写这篇博文了。

Net框架为我们实现了很多的配置API来简化我们对配置文件的操作。在第一个步骤中我们提到了配置节处理程序这个程序就是用来读写我们自定义的节点信息的。那么我们又如何来实现一个配置节处理程序呢?首先我们来了解一下相关的类和概念。

ConfigurationSection:自定义节点都要继承该类以提供对自定义配置节的自定义处理和编程访问。

ConfigurationElement:它表示配置文件内的一个元素。

ConfigurationElementCollection:它表示包含一个子元素集合的配置元素。

有了这些类我们可以归纳起来配置文件中有两种类型的配置元素。

第一:单一型配置元素即继承于ConfigurationElement的元素它不包含任何子元素。

第二:集合型配置元素即继承于ConfigurationElementCollection的元素它包含一个子元素集合。

概念往往都比较抽象,要搞清楚这些东西我们还是结合我们上面给的例子来具体说明一下。

在<dbFactory> 配置节中有两个元素,即<default>和<factorys>而<factorys>元素又包含了两个子元素。那么在这里<default>就是单一型配置元素,而<factorys>就是集合型配置元素我们需要分别实现与这些元素相对应的类及其属性。

<default>元素它是一个单一型的元素,所以我们继承ConfigurationElement该元素中有一个factory属性那么我们在类中进行相应的定义代码如下:

代码

   1:  public class DefaultElement : ConfigurationElement
   2:      {
   3:          [ConfigurationProperty("factory")]
   4:          public string Factory
   5:          {
   6:              get { return this["factory"] as string; }
   7:              set { this["factory"] = value; }
   8:          }
   9:      }

注意在属性定义上面我们需要注册该属性的ConfigurationProperty特性。

<factorys>子元素

代码:

   1:      public class FactoryElement : ConfigurationElement
   2:      {
   3:          [ConfigurationProperty("name")]
   4:          public string Name
   5:          {
   6:              get
   7:              {
   8:                  return this["name"] as string;
   9:              }
  10:              set
  11:              {
  12:                  this["name"] = value;
  13:              }
  14:          }
  15:          [ConfigurationProperty("assembly")]
  16:          public string Assembly
  17:          {
  18:              get
  19:              {
  20:                  return this["assembly"] as string;
  21:              }
  22:              set
  23:              {
  24:                  this["assembly"] = value;
  25:              }
  26:          }
  27:          [ConfigurationProperty("class")]
  28:          public string Class
  29:          {
  30:              get
  31:              {
  32:                  return this["class"] as string;
  33:              }
  34:              set
  35:              {
  36:                  this["class"] = value;
  37:              }
  38:          }
  39:      }

<factorys>元素是集合型元素继承ConfigurationElementCollection

代码:

   1:      public class FactoryElements : ConfigurationElementCollection
   2:      {
   3:          protected override ConfigurationElement CreateNewElement()
   4:          {
   5:              return new FactoryElement();
   6:          }
   7:          protected override object GetElementKey(ConfigurationElement element)
   8:          {
   9:              return ((FactoryElement)element).Name;
  10:          }
  11:          public FactoryElement this[string name]
  12:          {
  13:              get
  14:              {
  15:                  return BaseGet(name) as FactoryElement;
  16:              }
  17:          }
  18:      }

ConfigurationElementCollection类是个抽象类,你应该显示的实现它的CreateNewElement方法和GetElementKey方法。

<dbFactory>节点继承于ConfigurationSection

代码

   1:  public class DbFactorySection : ConfigurationSection
   2:  {
   3:      [ConfigurationProperty("default")]
   4:      public DefaultElement DefaultFactory
   5:      {
   6:          get { return this["default"] as DefaultElement; }
   7:          set { this["default"] = value; }
   8:      }
   9:      [ConfigurationProperty("factorys")]
  10:   
  11:      public FactoryElements Factorys
  12:      {
  13:          get
  14:          {
  15:              return this["factorys"] as FactoryElements;
  16:          }
  17:          set
  18:          {
  19:              this["factorys"] = value;
  20:          }
  21:      }
  22:  }

转载于:https://www.cnblogs.com/zhaox583132460/p/3447804.html

C#创建自定义配置节点相关推荐

  1. app.config自定义配置节点

    本来一直用xml保存配置文件的,但有一个组件就写一个好麻烦.于是想起了自定义配置节点哈哈~~我撒娇了复习了下 首先我在ConfigManager.Instance使用单例模式,其次Reflection ...

  2. ASP.NET系列:自定义配置节点的复用

    appSettings太简单,为每个程序自定义配置节点太复杂,因此要解决app.config&web.config自定义配置的复用问题. 1.读取不依赖SectionName,根节点可以定义为 ...

  3. ASP.NET Core 配置 - 创建自定义配置提供程序

    ASP.NET Core 配置 - 创建自定义配置提供程序 在本文中,我们将创建一个自定义配置提供程序,从数据库读取我们的配置.我们已经了解了默认配置提供程序的工作方式,现在我们将实现我们自己的自定义 ...

  4. UE4 创建自定义动画节点

    创建自定义动画节点需要两个类: 一个是您在编辑器中看到的图表节点 一个是真正在运行时工作的行为节点 动画图表节点,派生自:UAnimGraphNode_Base 例如:class UAnimGraph ...

  5. 用maya的api创建自定义的节点Creating Custom Locator

    原文地址 http://www.fevrierdorian.com/blog/post/2010/02/12/Creating-custom-locator-with-Maya-s-Python-AP ...

  6. Web.config中创建自定义配置节

    Web.config文件可谓是每个ASP.NET站点必不可少的一个文件,其中记录了网站的各种配置.一些比较静态但是又可能变更的数据可以放在web.config中,已有的appSettings配置节便有 ...

  7. ASP.NET使用ConfigurationSection在Web.Config创建自定义配置节

    主要代码,一定要继续System.Configuration.ConfigurationSection,具体的节点名称可以自行修改 using System; using System.Data; u ...

  8. 13、Kanzi插件——通过Kanzi Engine插件创建自定义节点+代码解析

    一.通过插件创建自定义类型的节点 在类Plugindemo 中添加一行 static kanzi::PropertyTypeEditorInfoSharedPtr makeEditorInfo(); ...

  9. 如何在.config文件自定义配置节

    在.NET程序中一般都有个应用程序配置文件在ASP.NET中是web.config,在控制台应用程序和Windows应用程序中是app.config.我们通常使用此配置文件来设置一些程序会用到的信息, ...

  10. 如何删除vue手脚架创建的自定义配置

    如何删除vue手脚架创建的自定义配置 首先要找到.vuerc这个文件 一般是在C盘 C:\Users\Administrator\ .vuerc 右键,打开方式用VScode打开 将presets这个 ...

最新文章

  1. 李飞飞宣布成立斯坦福“以人为本AI研究院”
  2. 路由器中Rom/Ram/NVRAM/FLASH的区别
  3. React开发(262):react中活动时间回显用moment
  4. python3多线程编程_Python 3多线程编程学习笔记-基础篇
  5. linux vim文本编辑器
  6. 贝索斯前妻再捐2.81亿美元
  7. vue 第九天 v-model的基本使用
  8. DNS在企业网络中的应用(一)
  9. java基础总结06-常用api类-api概述及jdk常用分类
  10. 3500份课程课后习题答案与大家分享~~
  11. 三菱FX3U生产方案 FX3U源代码+PCB文件全套生产方案 基于STM32F10的FX3U源码, 可直接使用GXworks2软件
  12. python数据分析09_pandas数据聚合与分组运算
  13. Linux动态频率调节系统CPUFreq之一:概述
  14. CiteSpace知识图谱
  15. AI技术是什么?AI对生活的影响有哪些?
  16. W10摄像头0xA00F4289和0xA00F4244等错误解决
  17. 解决python.exe 无法找到程序入口,无法定位程序输入点
  18. 华为虚拟服务器密码忘记怎么办,登录云服务器密码忘记了怎么办
  19. aria2c rpc php,Aria2(aria2c)
  20. powershell美化

热门文章

  1. 【数据库原理实验(openGauss)】视图
  2. 内存表与 InnoDB表对比
  3. java Context类
  4. CDlinux制作U盘启动盘,打造自己的口袋系统
  5. DNS劫持和HTTP劫持有何区别
  6. Laravel 的 Redis 使用指南
  7. HAOI2008 硬币购物
  8. 第六周--------职业规划------正确的选择让你少奋斗十年
  9. 对yolo与fasterrcnn anchors的理解
  10. C# 把ABCD转换成数字