西西软件园多重安全检测下载网站、值得信赖的软件下载站!
软件
软件
文章
搜索

首页编程开发其它知识 → 通过通用组件来完成节点配置及读取操作

通过通用组件来完成节点配置及读取操作

相关软件相关文章发表评论 来源:本站整理时间:2010/12/6 19:30:41字体大小:A-A+

作者:佚名点击:68次评论:0次标签: linqtoxml LINQtoSQL app.config web.config

ASPhere(web.config文件编辑器)V2.2.5 免费绿色英文版
  • 类型:编程工具大小:1.0M语言:英文 评分:5.0
  • 标签:
立即下载
 在app.config和web.config中我们通常要用自定义节点来完成想要扩展的配置内容,以前我们需要继承ConfigurationSection,ConfigurationElementCollection,ConfigurationElement这些类来完成配置信息的读取代码比较繁琐复杂。后来有了linq to xml 通过它我们很容易查询出配置信息,但是这样却少了类的定义,只能通过XmlNode来读取或者填充我们定义的类。

一、原来自定配置文件的编写方式:

01 1、定义类型比较繁琐

02

03 internal class AOPConfigurationSection : ConfigurationSection

04 {

05 [ConfigurationProperty("", IsDefaultCollection = true)]

06 public AopElementCollection Aops //需要定义这里略

07 {

08 get

09 {

10 return (AopElementCollection)base[""];

11 }

12 }

13 }

1 2、LINQ TO XML查询

2

3 XElement xelement = XElement.Parse(xml);

4 var name = from e in xelement.Elements("b")

5 let s = e.Element("e")

6 select s.Attribute("name").Value;

二、通用配置组件介绍

引用:DefinitionConfig.dll

对象:

DisplayConfigName特性(对应节点名称)

ReadSection类(初始化节点)

ConfigSectionsHelper类(配置解析类)

Sections类(配置集合类)

特点:根据自定义类型读取配置文件

注意:定义属性为string或class类型,集合为泛型Sections类

方法:GetConfigSection<ConnConfig>();//读取唯一节点类型

GetConfigSectionChild<ConnConfig>();//读取包含子节点类型

1 1.自定义类型

2

3 public class ConnConfig

4 {

5 [DisplayConfigName("name")]//配置文件中名称为name

6 public string Name { get; set; }

7 public string str{ get; set; }//如果没有声明特性,那么配置文件名称为属性名称str

8 }

01 2.单节点(不含子节点)

02

03 //这里section 中type属性为DefinitionConfig.ConfigSectionsHelper,DefinitionConfig

04

05 <configSections>

06 <section name="connstr" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig"/>

07

08 </configSections>

09

10 <connstr name="db" str="connstring"></connstr>

11

12 或

13

14 <connstr str="connstring">

15 <name>db</name>

16

17 <str>connstring</str>

18 </connstr>

19

20 上面我们只配置了一个connstr节点。没有任何子节点。注:此节点只能有一个,所以不能多个connstr。

21

22 我们把这个配置读取为ConnConfig类型。

23

24 ReadSection rs = new ReadSection("connstr");//实例化ReadSection,参数为节点名称

25

26 ConnConfig conn= rs.GetConfigSection<ConnConfig>();//通过GetConfigSection读取配置

27

28 Console.WriteLine(conn.Name);//验证是否读取到

01 3、多节点(含子节点)

02

03 <configSections>

04 <section name="connstrs" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig"/>

05

06 </configSections>

07

08 <connstrs>

09

10 <conn name=”sql” str=”connstring”></conn>

11

12 <conn name=”mysql”>

13

14 <str>connstring</str>

15

16 </conn>

17

18 <conn>

19

20 <name>sqlite</name>

21

22 <str>connstring</str>

23

24 </conn>

25

26 </connstrs>

27

28 ReadSection rs = new ReadSection("connstrs");//读取connstrs节点

29 var con = rs.GetConfigSectionChild<ConnConfig>();//GetConfigSectionChild读取子节点配置,注:只要有子节点配置都需要用这个来读取

30 foreach (var item in con)

31 {

32 Console.WriteLine(item.Name);

33 Console.WriteLine(item.str);

34 }

01 4、属性为自定义类型(含多个子节点)

02

03 public class ConnConfig

04 {

05 [DisplayConfigName("name")]

06 public string Name { get; set; }

07 public ConnString str { get; set; }//定义为类型

08 }

09

10 public class ConnString {

11 public string name { get; set; }

12 public string type { get; set; }

13 }

14

15 <connstrs>

16 <con>

17 <name>oracle</name>

18 <str name="oracledb">

19 <type>oracle10</type>

20 </str>

21 </con>

22

23 </connstrs>

24

25 ReadSection rs = new ReadSection("connstrs");

26 var con = rs.GetConfigSectionChild<ConnConfig>();

27 Console.WriteLine(con[0].str.name);//oracledb

01 5、属性为自定义集合类型(子节点集合)

02

03 public class ConnConfig

04 {

05 [DisplayConfigName("name")]

06 public string Name { get; set; }

07 public ConnString str { get; set; }

08 public Sections<AA> aa { get; set; }//定义集合

09 }

10

11 public class ConnString {

12 public string name { get; set; }

13 public string type { get; set; }

14 }

15

16 public class AA{

17 public string name{get;set;}

18 }

19

20 <connstrs>

21 <con>

22 <name>oracle</name>

23 <str name="oracledb">

24 <type>oracle10</type>

25 </str>

26 <aa name="1"></aa>

27 <aa>

28 <name>2</name>

29 </aa>

30 </con>

31

32 </connstrs>

33

34 ReadSection rs = new ReadSection("connstrs");

35 var con = rs.GetConfigSectionChild<ConnConfig>();

36 foreach (var item in con[0].aa)

37 {

38 Console.WriteLine(item.name);

39 }

01 6、属性为自定义多个集合类型(多子节点集合)

02

03 public class ConnConfig

04 {

05 [DisplayConfigName("name")]

06 public string Name { get; set; }

07 public ConnString str { get; set; }

08 public Sections<AA> aa { get; set; }

09 }

10

11 public class ConnString {

12 public string name { get; set; }

13 public string type { get; set; }

14 }

15

16 public class AA

17 {

18 public string name { get; set; }

19 public Sections<BB> bb { get; set; }

20 }

21

22 public class BB

23 {

24 public string type { get; set; }

25 }

26

27 <connstrs>

28 <con>

29 <name>oracle</name>

30 <str name="oracledb">

31 <type>oracle10</type>

32 </str>

33 <aa name="1">

34 <bb type="type1"></bb>

35 </aa>

36 <aa>

37 <name>2</name>

38 <bb type="type2"></bb>

39 </aa>

40 </con>

41

42 </connstrs>

43

44 ReadSection rs = new ReadSection("connstrs");

45 var con = rs.GetConfigSectionChild<ConnConfig>();

46 foreach (var item in con[0].aa)

47 {

48 Console.WriteLine(item.name);

49 }

1 7、配置外部config

2

3 <section name="mySection" type="DefinitionConfig.ConfigSectionsHelper,DefinitionConfig" requirePermission="false" restartOnExternalChanges="false"/>

4

5 <mySection configSource="mySection.config"/>

6

7 ReadSection rs = new ReadSection("mySection");//读取节点

8 var list = rs.GetConfigSectionChild<ConfigItem>();

组件下载:DefinitionConfig

组件Demo:ReadConfigDemo

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)