C# 快捷使用自定义配置节点
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# 快捷使用自定义配置节点的更多相关文章
- VS2012 常用web.config配置解析之自定义配置节点
在web.config文件中拥有一个用户自定义配置节点configSections,这个节点可以方便用户在web.config中随意的添加配置节点,让程序更加灵活(主要用于第三方插件的配置使用) 自定 ...
- App.config和Web.config配置文件的自定义配置节点
前言 昨天修改代码发现了一个问题,由于自己要在WCF服务接口中添加了一个方法,那么在相应调用的地方进行更新服务就可以了,不料意外发生了,竟然无法更新.左查右查终于发现了问题.App.config配置文 ...
- ASP.NET系列:自定义配置节点的复用
appSettings太简单,为每个程序自定义配置节点太复杂,因此要解决app.config&web.config自定义配置的复用问题. 1.读取不依赖SectionName,根节点可以定义为 ...
- 自定义配置节点configSections的使用
//App.config <?xml version="1.0" encoding="utf-8" ?><configuration> ...
- .Net 配置文件--继承ConfigurationSection实现自定义处理类处理自定义配置节点
除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...
- .Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点
除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...
- C#创建自定义配置节点
转载:http://www.educity.cn/develop/495003.html 在.Net应用程序中我们经常看到VS为我们生成的项目工程中都会含有app.config或者web.connfi ...
- App.Config自定义配置节点
配置文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <con ...
- .NET中如何自定义配置节点
.NET Framework在web.config或app.config中默认提供了很多种设置,以便能够改变应用程序内嵌组件的行为,例如<connectionStrings>.<ht ...
随机推荐
- 当一个元素被浮动后,它的display是否会被默认指定为block?
css 浮动后的元素不论是什么display的都默认是block就是设置inline也是block IE/6出现双边框的原因 出现双边距的条件是当浮动元素的浮动方向和margin的方向一致时才会出现. ...
- 51nod 1717 好数 (水题)
题目: 看起来很复杂,其实就是有多少个素因子就翻转多少次. 然后考虑到只有平方数有奇数个素因子. 一次过,上代码把: #include <iostream> #include <al ...
- HttpWebRequest WebExcepton: The remote server returned an error: (407) Proxy Authentication Required.
1. Supply the credentials of the Currently Logged on User to the Proxy object similar to this: // Be ...
- 解决maven 无法下载java-memcached的依赖问题
1.进入https://github.com/gwhalin/Memcached-Java-Client/downloads 下载java-memcached的jar包. 2.使用cmd进入maven ...
- 优动漫PAINT-牵牛花画法教程
喇叭型对画者自身的塑形功力会有较高的要求,作者很靠谱的把他的塑形方式详细呈现了出来~ 对于这样的一个仿真效果的牵牛花完全可以使用优动漫PAINT完成,简单又快捷,软件下载:http://www.don ...
- 一个简单的MyBatis项目(应用)
### 1. MYBATIS简介 MYBATIS是持久层框架,大大的简化了持久层开发. 当使用MYBATIS框架时,开发人员不必再编写繁琐的JDBC代码,只需要定义好每个功能对应的抽象方法与需要执 ...
- mysql 将时间转换成时间戳
select UNIX_TIMESTAMP(addtime/*date_column*/) from tablename 输出:1548658912 数据库原格式:2019-01-28 15:01:2 ...
- 多任务-进程之进程池Pool
1.什么是池? 首先从字面上看,池代表着一个容器,用来承载着某些内容的容器,了解到这里,就对进程池有了一个初步的轮廓. 2.什么是进程池Pool? (1)利用现实中的事物来理解: 对于小白初学者,接触 ...
- ocrsearch的横屏转竖屏的解决方案
//这是其中解决预览图的一部分(坑了好久的)@Override public void onPreviewFrame(byte[] data, Camera camera) { Size previe ...
- const int *a与int *const a,const int *const a的区别
来源:https://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰 ...