Enterprise Library 4.1学习笔记1----配置应用程序块(c/s和b/s均适用)
园子里TerryLee的Enterprise Library系列文章回顾与总结 http://www.cnblogs.com/Terrylee/archive/2006/08/01/464591.html已经写得很全面了,不过不是针对4.1版,一边看这一系列的文章学习,一边在4.1上摸索,准备写几篇学习笔记,今天先来认识Configuration Application Block(配置应用程序块) 参照TerryLee的文章,在4.1上怎么也找不到Configuration Application Block,相信很多人也跟我一样晕吧? 呵呵
无奈之下,打开EntLib41SrcQuick StartsConfiguration-MigrationCS 运行了下,恍然大悟!
This QuickStart does not use Enterprise Library. It is intended to provide guidance to users of previous versions of the Enterprise Library Configuration Application Block on how to migrate to the new features in System.Configuration in the .NET Framework 2.0. The Configuration functionality in the Enterprise Library Core provides services to the other blocks in the library and is not normally needed in user code.
大意是:Configuration Application Block这个模块现在已经合并到.Net 2.0 System.Configuration中了,所以EL中不再单独保留这一模块,也就是说这部分功能完全用.net 2.0自带的功能就可实现
应用场景:有时候,我们希望把某些类能序列化保存在app.config或web.config中,并能读写。
使用步骤:
1.先定义希望序列化保存的类,注意要继承自ConfigurationSection,示例代码如下:
Code
using System.Configuration;
namespace ConfigTest
{
public class MyConfigClass : ConfigurationSection
{
[ConfigurationProperty("name")]
public string Name
{
get { return (string)this["name"]; }
set { this["name"] = value; }
}
[ConfigurationProperty("age")]
public int Age
{
get { return (int)this["age"]; }
set { this["age"] = value; }
}
public override string ToString()
{
return "Name=" + Name + ",Age=" + Age;
}
}
}
2.写入配置
const string SECTIONNAME = "MySettings";
private void btnWrite_Click(object sender, EventArgs e)
{
MyConfigClass _myConfig = new MyConfigClass();
_myConfig.Age = int.Parse(txtAge.Text);
_myConfig.Name = txtName.Text;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.Sections.Remove(SECTIONNAME);
config.Sections.Add(SECTIONNAME, _myConfig);
config.Save();
}
注意:这是winform(c/s)下的代码,如果是网站web应用,这样是会出错的!
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
要改成下面这样
string _ConfigPath = Server.MapPath("web");//如果这里web改为web.config,最终会生成一个新的web.config.config的文件,所以这里必须在根目录下新建一个名为"web"(注意不带扩展名)文本文件,然后系统才会正确写到web.config中,能想到这招骗过系统,我太有才啦^_^
Configuration config = ConfigurationManager.OpenExeConfiguration(_ConfigPath);
3.读取配置
Code
private void btnRead_Click(object sender, EventArgs e)
{
//winform环境下,不加这一行,则永远读取的是缓存中的“旧”值;webform中因为页面刷新的关系,不加也可以正常读取到新的值
ConfigurationManager.RefreshSection(SECTIONNAME);
MyConfigClass configData = ConfigurationManager.GetSection(SECTIONNAME) as MyConfigClass;
if (configData != null)
{
txtRead.Text = configData.ToString();
}
else
{
txtRead.Text = SECTIONNAME + "配置节读取失败!";
}
}
另外当配置更改(也就是配置值被修改)时,可以利用FileSystemWatcher监听实现触发某一事件,详情可见EntLib41SrcQuick StartsConfiguration-Migration示例程序
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- 人工智能AI(5):线性代数之矩阵、线性空间
- iOS开发进阶篇——FRP与ReactiveCocoa的介绍(一)
- 英伟达修改GeForce软件使用条款:禁止在数据中心运行深度学习等应用
- 浅谈几种SLB技术的实现
- 史上最逼真人形机器人堪比健身教练,技能满满还会流汗
- 被监管前的疏忽?互联网金融大面积逾期,中介行为不容忽视
- 达尔文漏算的一步却让它填补,科学家认为人类最初认可的进化论不再适用
- 假如黑客攻击您的互联网汽车会怎么样?
- 享学课堂谈-Python初学者的设计模式入门
- 本体网络Ontology Zero入选国家工信部区块链开源项目计划
- 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 数组属性和方法
- 如何同步上游分支代码?
- 在 Pycharm 中安装及使用 Jupyter (图文详解)
- 【经验分享】如何使用keras进行多主机分布式训练
- 分享一种接口的日志格式
- Python 基础(二):基本语句
- javaScript代码飘红报错看不懂?读完这篇文章再试试!
- Synchronized简述
- PythonforResearch | 2_数据处理
- 程序员过关斩将--Http请求中如何保持状态?
- 如何有效恢复误删的HDFS文件
- 别再用OFFSET和LIMIT分页了
- 别再用大小比较时间了
- Redis快速入门
- 捉虫记:Unexpected end of JSON input while parsing
- 重新思考日志:业务系统竟然是一个大数据库?