通过ConfigurationSection来轻松地加载配置文件

添加人:admin三级(1325分)   添加时间:2008-01-04    阅读次数:1500  收藏此教程
最近写了一段自定义的ConfigurationSection继承类,通过该class可以轻松得定义和读取配置文件信息,
注意这里使用的是c# 2.0来实现的,相比1.1必须通过实现IConfigurationSectionHandler接口来自定义配置节点类方便多了
不论是web.config还是app.config,都可以使用ConfigurationManager类加载配置文件中自定义的节点内容。

以下是配置文件的层次结构:
 1<?xml version="1.0" encoding="utf-8" ?>
 2<configuration>
 3  <configSections>
 4    <section name="orders" type="ConsoleTest.OrdersSection, ConsoleTest"/>
 5  </configSections>
 6  <orders companyID="2001">
 7    <order number="100001" amount="222.22">
 8      <lineItems warehouseNumber="02">
 9        <lineItem number="00-000-001" description="wii"/>
10      </lineItems>
11    </order>
12    <order number="300001" amount="33.33">
13      <lineItems warehouseNumber="99">
14        <lineItem number="00-000-001" description="xbox 360"/>
15        <lineItem number="00-000-003" description="playstation 3"/>
16      </lineItems>
17    </order>
18  </orders>
19</configuration>
 
注意order和lineItem节点都是允许重复出现的

以下是继承自ConfigurationSection的自定义配置节点类:
  1public class OrdersSection : ConfigurationSection
  2{
  3    [ConfigurationProperty("companyID", IsRequired = true)]
  4    public string CompanyID
  5    {
  6        get
  7        {
  8            return (string)base["companyID"];
  9        }

 10        set
 11        {
 12            base["companyID"] = value;
 13        }

 14    }

 15
 16    [ConfigurationProperty("", IsDefaultCollection = true)]
 17    public OrderElementCollection Orders
 18    {
 19        get
 20        {
 21            return (OrderElementCollection)base[""];
 22        }

 23    }

 24}

 25
 26public class OrderElementCollection : ConfigurationElementCollection
 27{
 28    protected override ConfigurationElement CreateNewElement()
 29    {
 30        return new OrderElement();
 31    }

 32    protected override object GetElementKey(ConfigurationElement element)
 33    {
 34        return ((OrderElement)element).Number;
 35    }

 36
 37    public override ConfigurationElementCollectionType CollectionType
 38    {
 39        get
 40        {
 41            return ConfigurationElementCollectionType.BasicMap;
 42        }

 43    }

 44    protected override string ElementName
 45    {
 46        get
 47        {
 48            return "order";
 49        }

 50    }

 51
 52    public OrderElement this[int index]
 53    {
 54        get
 55        {
 56            return (OrderElement)BaseGet(index);
 57        }

 58        set
 59        {
 60            if (BaseGet(index) != null)
 61            {
 62                BaseRemoveAt(index);
 63            }

 64            BaseAdd(index, value);
 65        }

 66    }

 67}

 68
 69public class OrderElement : ConfigurationElement
 70{
 71    [ConfigurationProperty("number", IsRequired = true)]
 72    public string Number
 73    {
 74        get
 75        {
 76            return (string)base["number"];
 77        }

 78        set
 79        {
 80            base["number"] = value;
 81        }

 82    }

 83
 84    [ConfigurationProperty("amount", IsRequired = true)]
 85    public double Amount
 86    {
 87        get
 88        {
 89            return (double)base["amount"];
 90        }

 91        set
 92        {
 93            base["amount"] = value;
 94        }

 95    }

 96
 97    [ConfigurationProperty("lineItems", IsDefaultCollection = true)]
 98    public LineItemElementCollection LineItems
 99    {
100        get
101        {
102            return (LineItemElementCollection)base["lineItems"];
103        }

104    }

105}

106
107public class LineItemElementCollection : ConfigurationElementCollection
108{
109    [ConfigurationProperty("warehouseNumber", IsRequired = true)]
110    public string WarehouseNumber
111    {
112        get
113        {
114            return (string)base["warehouseNumber"];
115        }

116        set
117        {
118            base["warehouseNumber"] = value;
119        }

120    }

121
122    protected override ConfigurationElement CreateNewElement()
123    {
124        return new LineItemElement();
125    }

126    protected override object GetElementKey(ConfigurationElement element)
127    {
128        return ( (LineItemElement)element ).Number;
129    }

130
131    public override ConfigurationElementCollectionType CollectionType
132    {
133        get
134        {
135            return ConfigurationElementCollectionType.BasicMap;
136        }

137    }

138    protected override string ElementName
139    {
140        get
141        {
142            return "lineItem";
143        }

144    }

145
146    public LineItemElement this[int index]
147    {
148        get
149        {
150            return (LineItemElement)BaseGet(index);
151        }

152        set
153        {
154            if (BaseGet(index) != null)
155            {
156                BaseRemoveAt(index);
157            }

158            BaseAdd(index, value);
159        }

160    }

161}

162
163public class LineItemElement : ConfigurationElement
164{
165    [ConfigurationProperty("number", IsKey=true, IsRequired = true)]
166    public string Number
167    {
168        get
169        {
170            return (string)base["number"];
171        }

172        set
173        {
174            base["number"] = value;
175        }

176    }

177
178    [ConfigurationProperty("description", IsRequired = true)]
179    public string Description
180    {
181        get
182        {
183            return (string)base["description"];
184        }

185        set
186        {
187            base["description"] = value;
188        }

189    }

190}
 
1页 第1上一页1下一页
相关的教程: 配置文件 ConfigurationSection
收藏此教程

当前平均分: 0.0(2 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: