Asp.Net webconfig中使用configSections的用法
最近闲来无事,研究研究公司的框架,无意中打开了webconfig页面,发现了一个我不认识的节点<configSections></configSections>,于是百度之,大致的了解了它的作用,还是蛮重要的!!!但是我居然不知道!!!这是最骚的,瞬间觉得自己还是太年轻了!!!好了,不BB了,言归正传了。
1、configSections有什么用
大家都知道,webconfig文件中不能随意的添加节点,稍有不慎,浏览器就GG了,报错了,玩完了,整个人都不好了,(当然仅限于配置文件,你如果在外部XML文件了定义节点,然后生成对象,那就是你想怎么定义就怎么定义)。
所以configSections节点就是干这个事的,让你在webconfig中定义自想要定义的节点,当然肯定是要按照它指定的规则来!!!下面就来说configSection制定的规则。
2、为什么需要自定义节点
说完configSections作用(帮助我们按照它的规则创建一系列自定义节点),接下来说所为什么需要自定义节点?
为了增加应用程序的可移植性,通常网站需要配置一些自定义的节点,例如:文件上传的路径等,再深入的应用,可以定义工厂方法需要创建的类。
3、configSections的使用方法
<configSections>
<sectionGroup name="WebSiteConfig">
<section name="dbProviders" type="ZC.DBUtility.WebSiteInfoHandler,ZC.DBUtility"/>
<section name="fileUploadPath" type="ZC.DBUtility.WebSiteInfoHandler,ZC.DBUtility"/>
</sectionGroup>
</configSections>
(1)、定义一个configSection配置节
(2)、然后定义sectionGroup节点,这个配置节相当于所有section配置节的命名空间。
(3)、最后定义section配置节,通过这个配置节设置自定义节点的名称和处理configSection的一般处理程序 注意:这个处理程序必须继承IConfigurationSectionHandler不要问我为什么,你知道为什么!!!
下面开始设置自定义节点
<WebSiteConfig>
<dbProviders>
<add key="DBInstance" value="ConnString" type="sqlserver"/>
</dbProviders>
<fileUploadPath>
<add key="path" value="#" />
<add key="path1" value="#1" />
</fileUploadPath>
</WebSiteConfig>
自定义节点的定义规则要和上面的configSections的定义规则保持一致
最后编写一般处理程序,按照一定的规则获取我们的自定义节点的信息
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Xml;
namespace ZC.DBUtility
{
public class WebSiteInfoHandler : IConfigurationSectionHandler
{
/// <summary>
/// 返回自定义节点对象字典
/// </summary>
/// <param name="parent">父对象</param>
/// <param name="configContext">配置上下文对象</param>
/// <param name="section">节 XML 节点</param>
/// <returns> 创建的节处理程序对象。</returns>
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
Dictionary<string, ConfigEntity> config = new Dictionary<string, ConfigEntity>();
foreach (XmlNode node in section) {
string key = string.Empty, value = string.Empty, type = string.Empty;
if (node.Attributes["key"] != null)
key = node.Attributes["key"].Value;
if(node.Attributes["value"] != null)
value = node.Attributes["value"].Value;
if (node.Attributes["type"] != null)
type = node.Attributes["type"].Value;
config.Add(key, new ConfigEntity(value, type));
}
return config;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZC.DBUtility
{
public class ConfigEntity
{
/// <summary>
/// 自定义节点对象
/// </summary>
/// <param name="_value">节点的value值</param>
/// <param name="_type">节点的type值</param>
public ConfigEntity(string _value, string _type)
{
this.Value = _value;
this.Type = _type;
}
public string _value;
public string _type;
public string Value {
get { return _value; }
set { _value = value; }
}
public string Type {
get { return _type; }
set { _type = value; }
}
}
}
ok,做完这几步我们可以开始愉快的使用自定义节点的信息了
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ZC.DBUtility;
namespace Web.Ado
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<string, ConfigEntity> config = ConfigurationSettings.GetConfig("WebSiteConfig/dbProviders") as Dictionary<string, ConfigEntity>;
if (config != null) {
foreach (string key in config.Keys) {
ConfigEntity ce = config[key] as ConfigEntity;
Response.Write(ce.RetrieveFullName());
}
}
}
}
}
ok,done
- 让我们一起写出更有效的CSharp代码吧,少年们!
- SQL学习之计算字段的用法与解析
- JavaScript之JS的执行环境和作用域
- GOF设计模式快速学习
- JavaScript之面向对象学习一
- JavaScript之JS实现动画效果
- 深入入门系列--Data Structure--04树
- SQL学习之高级联结(自联结、自然联结、外联接)
- ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
- JavaScript之面向对象的概念,对象属性和对象属性的特性简介
- 快速入门系列--WebAPI--04在老版本MVC4下的调整
- SQL学习之SELECT子句顺序
- [图解]sqlserver中创建链接服务器
- 人工智能时代来临,还在炫耀孩子能考100分?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法