写在前面:
最近
准备写Enterprise Library Step By Step
的系列文章,对于每一个应用程序块,我都会用入门篇,进阶篇,剖析篇三篇文章去写。
在入门篇里会详细介绍应用程序块的使用步骤,主要是针对新手入门的;进阶篇会介绍一些应用程序块的更深的应用及扩展机制;剖析篇会去分析应用程序块的底层设计和类设计的一些内容。所有的观点都纯属个人理解,有不当之处请大家多多指教。
一.配置应用程序块概述:
几乎每一个应用程序都需要一些配置信息,这些信息可以是简单的数据库连接信息,或者复杂的多块多层次用户信息。如何以及在哪里存储应用程序配置数据是程序员经常面临的问题。
.
为应用系统提供了一个通用的配置管理解决方案,可方便灵活地从各种存储中读写配置信息
配置信息
.
为读写配置信息提供了简单的接口
.
支持不同的配置存储
.
支持配置信息的加密
.
支持配置文件的动态更新
.
支持复杂的配置对象
Config Config Block Block
的使用场景:
.
应用系统需要在运行时读写复杂的配置信息
.
应用系统需要在配置文件中保存敏感数据(比如密码)
.
设计应用系统时能帮助开发人员进行正确的配置读写
.
应用系统部署后系统管理员能有一个好的工具修改
XM
配置文件
二.使用步骤:
假设已经新建好的项目中,并且已经存在
Web.config
或
App.config
配置文件。
第一步:建立自定义配置数据类:
该类根据项目的实际情况建立,需要注意的是该类必须是可序列化的(
XMLSerializer
),并且可以任意复杂
1
using
System;
2 using System.Text;
3 using System.Xml.Serialization;
4
5 namespace ConfigurationQuickStart
6 {
7 public class EditorFontData
8 {
9 private string name;
10 private float size;
11 private int style;
12
13 public EditorFontData()
14 {
15 }
16
17 public string Name
18 {
19 get{ return name; }
20 set{ name = value; }
21 }
22
23 public float Size
24 {
25 get{ return size; }
26 set{ size = value; }
27 }
28 public int Style
29 {
30 get{ return style; }
31 set{ style = value; }
32 }
33
34 public override string ToString()
35 {
36 StringBuilder sb = new StringBuilder();
37 sb.AppendFormat("Name = {0}; Size = {1}; Style = {2}", name, size.ToString(), style.ToString());
38
39 return sb.ToString();
40 }
41 }
42}
43
2 using System.Text;
3 using System.Xml.Serialization;
4
5 namespace ConfigurationQuickStart
6 {
7 public class EditorFontData
8 {
9 private string name;
10 private float size;
11 private int style;
12
13 public EditorFontData()
14 {
15 }
16
17 public string Name
18 {
19 get{ return name; }
20 set{ name = value; }
21 }
22
23 public float Size
24 {
25 get{ return size; }
26 set{ size = value; }
27 }
28 public int Style
29 {
30 get{ return style; }
31 set{ style = value; }
32 }
33
34 public override string ToString()
35 {
36 StringBuilder sb = new StringBuilder();
37 sb.AppendFormat("Name = {0}; Size = {1}; Style = {2}", name, size.ToString(), style.ToString());
38
39 return sb.ToString();
40 }
41 }
42}
43
第二步:用
Enterprise Library Configuration
配置应用程序:
1
.运行
Enterprise Library Configuration
工具,选择
File | Open Application
打开
App.config
文件
2
.右击
Application
并选择
New | Configuration Application Block
,
创建一个配置应用程序块
3
.右击
Configuration Application Block
并选择
New | Configuration Section
,
创建一个配置区,注意对于每一个配置区都要设置一个
Storage Provider
和一个
Transformer
。
4
.重命名
configuration section为EditorSettings
5
.右击
EditorSettings
并选择
New | XML File Storage Provider
,设置它的
Storage Provider
6
.在
FileName
输入框中输入
EditorSettings.config
,路径相对于
App.config
7 .在 Enterprise Library Configuration 工具里面选择New | XML Serializer Transformer。指定它的Transformer
8
.
选择
File | Save All
命令保存全部
9
.此时在
VS
中选择
项目|显示所有文件
,就会发现在项目中多出了一个名为
EditorSettings.config
的配置文件
10
.在项目中选择
属性
|
生成事件
|
生成后事件命令行
输入如下内容:
1
copy
"
$(ProjectDir)\*.config
"
"
$(TargetDir)
"
第三步:用代码访问配置数据:
1
.在项目中添加如下两个引用
- Microsoft.Practices.EnterpriseLibrary.Common.dll,
- Microsoft.Practices.EnterpriseLibrary.Configuration.dll.
2
.并在
.CS
代码中添加:
1
using
Microsoft.Practices.EnterpriseLibrary.Configuration;
3
.写配置信息:注意在写配置信息时是整个配置区被覆盖(无合并),另外,元配置文件必须包含该配置区的定义。
1
/// <summary>
2 /// 写XML
3 /// </summary>
4 private void writeXmlConfigDataButton_Click( object sender, EventArgs e)
5 {
6 EditorFontData configData = new EditorFontData();
7
8 if (fontDialog.ShowDialog() == DialogResult.OK)
9 {
10 configData.Name = fontDialog.Font.Name;
11 configData.Size = fontDialog.Font.Size;
12 configData.Style = Convert.ToInt32(fontDialog.Font.Style);
13
14 ///注意WriteConfiguration 方法,有两个参数:
15 ///第一个是配置节名称
16 ///第二个就是自定义配置类的对象
17 ///实际上就是将配置数据写到这个配置节里去了
18 ///程序对此的处理是透明的
19 ConfigurationManager.WriteConfiguration("EditorSettings", configData);
20
21 StringBuilder results = new StringBuilder();
22 results.Append("Configuration Data Updated:");
23 results.Append(Environment.NewLine);
24 results.Append('\t');
25 results.Append(configData.ToString());
26
27 }
28
2 /// 写XML
3 /// </summary>
4 private void writeXmlConfigDataButton_Click( object sender, EventArgs e)
5 {
6 EditorFontData configData = new EditorFontData();
7
8 if (fontDialog.ShowDialog() == DialogResult.OK)
9 {
10 configData.Name = fontDialog.Font.Name;
11 configData.Size = fontDialog.Font.Size;
12 configData.Style = Convert.ToInt32(fontDialog.Font.Style);
13
14 ///注意WriteConfiguration 方法,有两个参数:
15 ///第一个是配置节名称
16 ///第二个就是自定义配置类的对象
17 ///实际上就是将配置数据写到这个配置节里去了
18 ///程序对此的处理是透明的
19 ConfigurationManager.WriteConfiguration("EditorSettings", configData);
20
21 StringBuilder results = new StringBuilder();
22 results.Append("Configuration Data Updated:");
23 results.Append(Environment.NewLine);
24 results.Append('\t');
25 results.Append(configData.ToString());
26
27 }
28
4
.读配置信息:
1
/// <summary>
2 /// 读XML
3 /// </summary>
4 private void readXmlConfigDataButton_Click( object sender, System.EventArgs e)
5 {
6 Cursor = System.Windows.Forms.Cursors.WaitCursor;
7
8 ///GetConfiguration方法就一个参数,即配置节名称
9 ///注意别忘了进行强制类型转换
10 EditorFontData configData = ConfigurationManager.GetConfiguration("EditorSettings") as EditorFontData;
11
12 StringBuilder results = new StringBuilder();
13 results.Append("Configuration settings:");
14 results.Append(Environment.NewLine);
15 results.Append('\t');
16 results.Append(configData.ToString());
17 results.Append(Environment.NewLine);
18
19 Cursor = System.Windows.Forms.Cursors.Arrow;
20 }
2 /// 读XML
3 /// </summary>
4 private void readXmlConfigDataButton_Click( object sender, System.EventArgs e)
5 {
6 Cursor = System.Windows.Forms.Cursors.WaitCursor;
7
8 ///GetConfiguration方法就一个参数,即配置节名称
9 ///注意别忘了进行强制类型转换
10 EditorFontData configData = ConfigurationManager.GetConfiguration("EditorSettings") as EditorFontData;
11
12 StringBuilder results = new StringBuilder();
13 results.Append("Configuration settings:");
14 results.Append(Environment.NewLine);
15 results.Append('\t');
16 results.Append(configData.ToString());
17 results.Append(Environment.NewLine);
18
19 Cursor = System.Windows.Forms.Cursors.Arrow;
20 }
入门篇就到这里了,下面我会尽快写配置应用程序块的进阶篇及剖析篇的:)
本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67597,如需转载请自行联系原作者