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 ...
随机推荐
- Android Fragment中调用getActivity为null的问题
在使用fragment的时候经常会遇到getActivity()为null的情况.比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题.之前解决这个问题,通常都是直 ...
- C# HttpHelper万能框架实现 接口
POST请请求是使用Http协议与请求的URL进行连接,然后再写入数据,最后关闭连接的过程 方法(1) //要Post的数据 string postdate = "a=123&c=4 ...
- PHP XML操作类DOMDocument
不得不自已写一个.XML 的操作一直没有用过.下面是自己搜集的XML操作类 DOMDocument相关的内容. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点 ...
- 使用vue实现简单键盘,支持移动端和pc端
常看到各种app应用中使用自定义的键盘,本例子中使用vue2实现个简单的键盘,支持在移动端和PC端使用,欢迎点赞,h5 ios输入框与键盘 兼容性优化 实现效果: Keyboard.vue <t ...
- py_One
1.Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分 ...
- pandas学习笔记 - 常见的数据处理方式
1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrange import pandas as ...
- hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】
题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...
- spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定
本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...
- 【C++探索之旅】第二部分第一课:面向对象初探,string的惊天内幕
内容简单介绍 1.第二部分第一课:面向对象初探.string的惊天内幕 2.第二部分第二课预告:掀起了"类"的盖头来(一) 面向对象初探,string的惊天内幕 上一课<[C ...
- 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue
原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...