C#除了appSettings和connectionStrings默认配置外还允许用户自定义使用配置。C# 提供3中简单的自定义配置,配置文件如下

  

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="Config1" type="System.Configuration.SingleTagSectionHandler"/>
<section name="Config2" type="System.Configuration.DictionarySectionHandler"/>
<section name="Config3" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<Config1 a="1" b="2"/>
<Config2>
<add key="a" value="1"/>
<add key="b" value="2"/>
</Config2>
<Config3>
<add key="a" value="1"/>
<add key="b" value="2"/>
</Config3>
</configuration>

  使用这3种中配置要注意:

  1.  configSections节点必须要是配置的第一个节点。

  2. 自定义配置要在configSections内部声明。格式是<section name="配置名" type="类的全路径,dll名"/> 系统的这3种配置dll省略。

   3. 针对以上3种配置格式不能变,不能变,不能变,重要的事说3遍 。<Config1 a="1" b="2"></Config1 > 这种写法 抛出异常。

  这3中使用也比较简单,用ConfigurationManager.GetSection(XXX)获取节点数据。第一种和第二种都返回Hashtable类型(Hashtable实现IDictionary接口),第三种返回NameValueCollection 与appSettings返回类型相同。

  

  public static void Main(string[] args)
{
// Hashtable
Hashtable config1 = (Hashtable)ConfigurationManager.GetSection("Config1");
Dictionary<string, string> c = new Dictionary<string, string>();
Console.WriteLine("****************配置1**********************");
Console.WriteLine("遍历");
foreach (DictionaryEntry g in config1)
{
Console.WriteLine(g.Key + "=" + g.Value);
}
Console.WriteLine("使用:a=" + config1["a"]); Hashtable config2 = (Hashtable)ConfigurationManager.GetSection("Config2");
Console.WriteLine("****************配置2**********************");
Console.WriteLine("遍历");
foreach (DictionaryEntry g in config1)
{
Console.WriteLine(g.Key + "=" + g.Value);
}
Console.WriteLine("使用:a=" + config1["a"]); Console.WriteLine("****************配置3**********************");
NameValueCollection config3 = (NameValueCollection)ConfigurationManager.GetSection("Config3");
Console.WriteLine("遍历");
foreach (var item in config3.AllKeys)
{
Console.WriteLine(item + "=" + config3[item]);
}
Console.WriteLine("使用:a=" + config3["a"]); Console.ReadLine();
}

获取配置

 调试结果:

  接下来我们来讲讲如何使用自己格式的配置方法,

  一.建立一个配置文件 如下

  

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MyConfig" type="CustomConfig.MyConfig.ConfigHandler,CustomConfig" />
</configSections> <MyConfig c="3">
<a>1</a>
<b>2</b>
</MyConfig> </configuration>

  确定数据格式和解析类。

  二.解析类

  

 namespace CustomConfig.MyConfig
{
public class ConfigHandler : IConfigurationSectionHandler
{
public object Create(object parent, object configContext, XmlNode section)
{
ConfigModel model = new ConfigModel //根据需要的类型来返回
{
a = section.SelectSingleNode("/MyConfig/a").InnerText,
b = section.SelectSingleNode("/MyConfig/b").InnerText,
c = section.SelectSingleNode("/MyConfig").Attributes.GetNamedItem("c").Value
};
return model;
}
} public class ConfigModel
{
public string a { get; set; }
public string b { get; set; }
public string c { get; set; }
}
}

  1.配置解析类要实现 IConfigurationSectionHandler j接口  Create函数为具体解析函数,XmlNode section 包含节点全部数据

  2.确定数据的返回格式如 ConfigModel,可根据需要编写。

  3.解析方法和解析Xml相同。

  三. 取配置数据

  方法与之前相同一样用ConfigurationManager.GetSection(XXX)函数 ,执行时会自动调用解析类。

  

public static void Main(string[] args)
{
ConfigModel config = (ConfigModel)ConfigurationManager.GetSection("MyConfig");
Console.WriteLine(config.a + "," + config.b + "," + config.c);
}

  

  

C# 快捷使用自定义配置节点的更多相关文章

  1. VS2012 常用web.config配置解析之自定义配置节点

    在web.config文件中拥有一个用户自定义配置节点configSections,这个节点可以方便用户在web.config中随意的添加配置节点,让程序更加灵活(主要用于第三方插件的配置使用) 自定 ...

  2. App.config和Web.config配置文件的自定义配置节点

    前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...

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

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

  4. 自定义配置节点configSections的使用

    //App.config <?xml version="1.0" encoding="utf-8" ?><configuration>  ...

  5. .Net 配置文件--继承ConfigurationSection实现自定义处理类处理自定义配置节点

    除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...

  6. .Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点

    除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...

  7. C#创建自定义配置节点

    转载:http://www.educity.cn/develop/495003.html 在.Net应用程序中我们经常看到VS为我们生成的项目工程中都会含有app.config或者web.connfi ...

  8. App.Config自定义配置节点

    配置文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <con ...

  9. .NET中如何自定义配置节点

    .NET Framework在web.config或app.config中默认提供了很多种设置,以便能够改变应用程序内嵌组件的行为,例如<connectionStrings>.<ht ...

随机推荐

  1. 【原创】关于java中的lock

    看了下java中高性能锁Lock,其中有如下: ReentrantLock:独占锁,类似于synchronized,不过锁的粒度更小 ReadWriteLock(ReentrantReadWriteL ...

  2. Thread Control Block

    Thread Control Block The following is the declaration of the Thread Control Block. struct tcb { u32_ ...

  3. 使用Python进行多线程检查.moe三位剩余有效域名

    翻看博客看到一段不错的代码 虽然近期没有购买域名的需求 不过日后有购买域名的需求的话 稍作修改直接使用还是很方便的 import threading import requests import js ...

  4. wordpress 后台登录增加访问效验,优化退出效果

    之前记录了 wordpress 后台登录增加访问效验, 记录了增加后台访问地址被直接访问的困难性的修改步骤. 还有一个地方需要补充一下,就是退出. 退出的时候不做调整会直接跳到首页,这样体验很不好. ...

  5. Python爬虫简单入门及小技巧

    刚刚申请博客,内心激动万分.于是为了扩充一下分类,随便一个随笔,也为了怕忘记新学的东西由于博主十分怠惰,所以本文并不包含安装python(以及各种模块)和python语法. 目标 前几天上B站时看到一 ...

  6. oracle和mysql的分页

    如果我们是通过JDBC的方式访问数据库,那么就有必要根据数据库类型采取不同的SQL分页语句,对于MySql数据库,我们可以采用limit语句进行分页,对于Oracle数据库,我们可以采用rownum的 ...

  7. (转)RestFul 无状态的一点认识

    今天早上在Yahoo的邮件列表里看到一篇颇有意思的讨论,标题为RESTful vs. unRESTful: Session IDs and Authentication(51CTO编者注:意为REST ...

  8. 题解 P3413 【SAC#1 - 萌数】

    这道题刚开始正向思维,然后处理重复的时候咕咕了. 参考了@巨型方块 大佬的题解后AC了,在这里就说几个我觉得比较重要或是容易被忽略的点,然后补充一些跳过的证明. 这道题的状态可以设为$dp[i][j] ...

  9. grep的使用【转】

    grep的作用是显示匹配一个或多个模式的文本行.时常会作为管道(|)的第一步,以便对匹配的数据作进一步处理.grep常用于查找和替换文本的.在传统上,grep有3个版本:grep.egrep(扩展gr ...

  10. 严重: 文档无效: 找不到语法。 at (null:2:19)

    1.错误描写叙述 严重: 文档无效: 找不到语法. at (null:2:19) org.xml.sax.SAXParseException; systemId: file:/D:/MyEclipse ...