C# 配置文件 自定義結點

  1.  對於配置自定義結點,需要繼承ConfigurationSection類。

  UrlsSection : ConfigurationSection

  2.  配置文件中,需要如下引用:    

View Code
  <configSections><section name="orders" type="WebApplication4.UrlsSection, WebApplication4"/><section name="MyUrls" type="WebApplication4.UrlsCollectionSection,WebApplication4"/></configSections><MyUrls><urls><remove name="Contoso" /><add name="Contoso" url="http://www.contoso.com" port="0" /></urls></MyUrls><orders companyID="2001"><myChildSectionmyChildAttrib1="Zippy"myChildAttrib2="Michael Zawondy "/><order number="100001" amount="222.22"><lineItems warehouseNumber="02"><lineItem number="00-000-001" description="wii"/></lineItems></order><order number="300001" amount="33.33"><lineItems warehouseNumber="99"><lineItem number="00-000-001" description="xbox 360"/><lineItem number="00-000-003" description="playstation 3"/></lineItems></order></orders>

    上面的配置文件,定義了2個結點,一個是UrlsSection,另一是UrlsCollectionSection。

      <configSections>
          <section name="orders" type="WebApplication4.UrlsSection, WebApplication4"/>
          <section name="MyUrls" type="WebApplication4.UrlsCollectionSection,WebApplication4"/>
    </configSections>

 3.  在定義好ConfigurationSection中,可以定義屬性,屬性包括:簡單屬性 複雜屬性 集合屬性 如下:

View Code
public class UrlsSection : ConfigurationSection{[ConfigurationProperty("companyID", IsRequired = true)]public string CompanyID{get{return (string)base["companyID"];}set{base["companyID"] = value;}}[ConfigurationProperty("", IsDefaultCollection = true)]public OrderElementCollection Orders{get{return (OrderElementCollection)base[""];}}[ConfigurationProperty("myChildSection")]public MyChildConfigElement MyChildSection{get{ return (MyChildConfigElement)this["myChildSection"]; }set{ this["myChildSection"] = value; }}}

  簡單屬性,就是c#提供的一些默認類型,int string 等。

  複雜屬性,其實就是定義一個類,其中集合屬性頁可以認為是其中的一種。

   上面CompanyID就是簡單類型,是string。對應所有屬性,需要指定 [ConfigurationProperty("companyID", IsRequired = true)]屬性

在ConfigurationProperty屬性中,可以指定配置文件中的名稱等,如果是集合類型需要這樣定義這個屬性

[ConfigurationProperty("", IsDefaultCollection = true)]

 4. 對應複雜類型,如果不是集合類型,需要繼承ConfigurationElement

View Code
public class MyChildConfigElement : ConfigurationElement{public MyChildConfigElement(){}public MyChildConfigElement(String a1, String a2){MyChildAttribute1 = a1;MyChildAttribute2 = a2;}[ConfigurationProperty("myChildAttrib1", DefaultValue = "Zippy", IsRequired = true)][StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]public String MyChildAttribute1{get{ return (String)this["myChildAttrib1"]; }set{ this["myChildAttrib1"] = value; }}[ConfigurationProperty("myChildAttrib2", DefaultValue = "Michael Zawondy", IsRequired = true)][StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]public String MyChildAttribute2{get{ return (String)this["myChildAttrib2"]; }set{ this["myChildAttrib2"] = value; }}}

   上面的代碼中,有2個構造函數,構造函數的作用,是為了在配置文件中,能直接設置屬性,下面是2個參數的構造函數。

      <myChildSection
         myChildAttrib1="Zippy"
         myChildAttrib2="Michael Zawondy "/>

 5. 如果是集合類型,需要繼承ConfigurationElementCollection,對應集合類型,由於ConfigurationElementCollectionType類型不同,有不同的實現。

   5.1 ConfigurationElementCollectionType.AddRemoveClearMap

        這種方式,配置文件中,需要這樣寫:

    <urls>
      <remove name="Contoso" />
      <add name="Contoso" url="http://www.contoso.com" port="0" />
    </urls>

實現代碼如下:

   

View Code
public class UrlsCollection : ConfigurationElementCollection
{public UrlsCollection(){UrlConfigElement url = (UrlConfigElement)CreateNewElement();Add(url);}public override ConfigurationElementCollectionType CollectionType{get{return ConfigurationElementCollectionType.AddRemoveClearMap;}}protected override ConfigurationElement CreateNewElement(){return new UrlConfigElement();}protected override Object GetElementKey(ConfigurationElement element){return ((UrlConfigElement)element).Name;}public UrlConfigElement this[int index]{get{return (UrlConfigElement)BaseGet(index);}set{if (BaseGet(index) != null){BaseRemoveAt(index);}BaseAdd(index, value);}}new public UrlConfigElement this[string Name]{get{return (UrlConfigElement)BaseGet(Name);}}public int IndexOf(UrlConfigElement url){return BaseIndexOf(url);}public void Add(UrlConfigElement url){BaseAdd(url);}protected override void BaseAdd(ConfigurationElement element){BaseAdd(element, false);}public void Remove(UrlConfigElement url){if (BaseIndexOf(url) >= 0)BaseRemove(url.Name);}public void RemoveAt(int index){BaseRemoveAt(index);}public void Remove(string name){BaseRemove(name);}public void Clear(){BaseClear();}
}

同時 在ConfigurationSection 中的定義也不一樣,如下:

     [ConfigurationProperty("urls", IsDefaultCollection = false)]
        [ConfigurationCollection(typeof(UrlsCollection),
            AddItemName = "add",
            ClearItemsName = "clear",
            RemoveItemName = "remove")]
        public UrlsCollection Urls
        {
            get
            {
                UrlsCollection urlsCollection =
                    (UrlsCollection)base["urls"];
                return urlsCollection;
            }
        }

    5.2 ConfigurationElementCollectionType.BasicMap

     配置文件如下寫:

        <order number="100001" amount="222.22">
          <lineItems warehouseNumber="02">
            <lineItem number="00-000-001" description="wii"/>
    
        </lineItems>
       
      </order>
          <order number="300001" amount="33.33">
              <lineItems warehouseNumber="99">
                  <lineItem number="00-000-001" description="xbox 360"/>
                  <lineItem number="00-000-003" description="playstation 3"/>
          
        </lineItems>
        
      </order>

實現類如下:

View Code
public class OrderElementCollection : ConfigurationElementCollection{protected override ConfigurationElement CreateNewElement(){return new OrderElement();}protected override object GetElementKey(ConfigurationElement element){return ((OrderElement)element).Number;}public override ConfigurationElementCollectionType CollectionType{get{return ConfigurationElementCollectionType.BasicMap;}}protected override string ElementName{get{return "order";}}public OrderElement this[int index]{get{return (OrderElement)BaseGet(index);}set{if (BaseGet(index) != null){BaseRemoveAt(index);}BaseAdd(index, value);}}}

在ConfigurationSection中定義的屬性,與一般的屬性是一樣的,如下:

        [ConfigurationProperty("", IsDefaultCollection = true)]
        public OrderElementCollection Orders
        {
            get
            {
                return (OrderElementCollection)base[""];
            }
        }

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Teco/archive/2012/04/29/2475986.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stream流思想和常用方法

一、IO流用于读写&#xff1b;Stream流用于处理数组和集合数据&#xff1b; 1、传统集合遍历&#xff1a; 2、使用Stream流的方式过滤&#xff1a; 其中&#xff0c;链式编程&#xff08;返回值就是对象自己&#xff09;中&#xff0c;filter使用的是Predicate函数式接口&#…

Stream流方法引用

一、对象存在&#xff0c;方法也存在&#xff0c;双冒号引用 1、方法引用的概念&#xff1a; 使用实例&#xff1a; 1.1先定义i一个函数式接口&#xff1a; 1.2定义一个入参参数列表有函数式接口的方法&#xff1a; 1.3调用这个入参有函数式接口的方法&#xff1a; lambda表达式…

为什么要在定义抽象类时使用abstract关键字

本文为原创&#xff0c;如需转载&#xff0c;请注明作者和出处&#xff0c;谢谢&#xff01;众所周之&#xff0c;在任何面向对象的语言中&#xff08;包括Java、C#&#xff09;&#xff0c;在定义抽象类时必须使用abstract关键字。虽然这已经习已为常了&#xff0c;但实际上ab…

pku 3252 Round Numbers 组合数学 找规律+排列组合

http://poj.org/problem?id3252 看了discuss里面的解题报告才明白的&#xff0c;这个解题报告太强大了&#xff1a;http://poj.org/showmessage?message_id158333不多讲已经很详细了&#xff0c;不明白多看几遍肯定会明白的。 注意这里的公式c(i,j) c(i - 1,j -1) c(i - 1…

《The Coaching Booster》问与答

由Shirly Ronen-Harel和Jens R. Woinowski 编写的《The Coaching Booster》 一书探讨了不同的教练方法和实践&#xff0c;并介绍了一种教练框架&#xff0c;支持教练帮助人们达到他们的目标。\InfoQ 采访了Shirly Ronen-Harel 和 Jens R. Woinowski&#xff0c;谈论了他们的书为…

反射应用和获取Class对象的三种方式

一、写一个“框架”&#xff0c;可以创建任何对象运行任何方法 1、配置文件 2、使用类加载器ClassLoader&#xff0c;Properties集合是可以和IO流结合使用完成读取和写入数据的集合&#xff0c;方法参数列表是IO流&#xff1b; Class类的静态方法forName()创建Class对象&#x…

8 种有趣的用于 Web 品牌的动物

当 Mozilla 推出最新移动浏览器 Fennec 时&#xff0c;很多人需要借助 Wikipedia 才知道 Fennec 是什么意思&#xff0c;Web 2.0 产品以各种古怪的命名著称&#xff0c;要么非常拗口&#xff0c;象 Flickr&#xff0c;要么很 cute&#xff0c;象 Google&#xff0c;或者干脆不知…

注解使用案例

一、一个简易测试框架&#xff1a; 1、定义Check注解&#xff0c;无需添加属性 2、需要测试的类&#xff0c;添加Check注解 3、测试框架代码&#xff1a; for循环上创建一个文件输出流对象&#xff0c;记录方法测试记录&#xff1a; 捕捉异常&#xff1a; 其中&#xff0c;get…

Java Date Time 教程-时间测量

为什么80%的码农都做不了架构师&#xff1f;>>> 在Java中&#xff0c;用System.currentTimeMillis()来测量时间最方便。你要做的是在某些操作之前获取到时间&#xff0c;然后在这些操作之后你想要测量时间&#xff0c;算出时间差。下面是一个例子&#xff1a; 1lon…

企业使用RTX腾讯通2013

2019独角兽企业重金招聘Python工程师标准>>> 腾讯通基本上成为了公司的默认配置&#xff0c;确实缺不了&#xff0c;这里记录一篇配置RTX&#xff0c;包括服务端和客户端。 1.客户端的使用 1.1 一般使用人员不需要关心任何事&#xff0c;只需要登录管理员分配给你的…

Android中弹出对话框,AlertDialog关键代码

写在这里便于以后查看。 Android中弹出对话框的关键代码&#xff1a; 1 btn01.setOnClickListener(new OnClickListener() {2 3 Override4 public void onClick(View v) {5 Toast.makeText(musicActivity.this, "tanchu", 1…

poj 2226 Muddy Fields 最小顶点覆盖

题目链接&#xff1a;http://poj.org/problem?id2226 这道题跟上一道很相似不同之处在于这里不是整行或者整列的删&#xff0c;而是连续的几个可以一起删&#xff0c;不连的不能删&#xff0c;这就要对原图进行处理&#xff0c;对原有的图行由上到下&#xff0c;列由左到右进行…

python抓取网站URL小工具

1、安装Python requests模块&#xff08;通过pip&#xff09;&#xff1a; 环境搭建好了&#xff01; 2、测试一下抓取URL的过程&#xff1a; 抓取出来的URL有JavaScript代码&#xff0c;正则上还有待更加完善&#xff0c;有兴趣的可以研究下~&#xff01; 工具源代码: #coding…

二叉树特性及详细例子

二叉树的性质 一般二叉树性质&#xff1a; 在非空二叉树的k层上&#xff0c;至多有2k个节点(k>0)高度为k的二叉树中,最多有2k1-1个节点(k>0)对于任何一棵非空的二叉树,如果叶节点个数为n0&#xff0c;度数为2的节点个数为n2&#xff0c;则有: n0 n2 1完全二叉树性质:只…

创建 Spring容器的三种方式

一、src路径下打包完在war包的classes层级下 1、Spring容器创建的三种方式 创建Bean容器之后创建对象&#xff1a; 其中第三种使用的是BeanFactory对象 2、spring通过配置文件用容器创建对象的原理 转载于:https://www.cnblogs.com/wmqiang/p/11537638.html

yii使用寻呼功能

CDbCriteria这是类包使用&#xff0c;包是yii自带专门用来处理类似分类这种功能的。而我们使用yii框架然后调用这种方法会起到事半功倍的效果&#xff0c;会发现使用这个可以节省非常多的时间。让你高速的使用PHP中分页的功能。 还要使用的一个类包就是CPagination&#xff0c;…

VTK:一个面向对象的可视化类库(zz)

VTK&#xff1a;一个面向对象的可视化类库(zz) &#xff08;高隽 黄伟 合肥工业大学计算机与信息学院 合肥 230009&#xff09; 摘要 Visualization Toolkit 是一个面向对象的可视化类库&#xff0c;它为从事可视化应用程序开发的广大科研工作者提供直接的技术支持。VTK…

装配Bean的三种方式

一、装配Bean就是在xml写一个Bean标签&#xff1b;装配完Bean,还需要读取xml配置文件创建Spring容器来创建对象&#xff1b; 1、new 实现类方式 正常的三种创建Bean容器的方法都可以根据装配的Bean创建的Bean对象&#xff1b; 2、静态工厂模式方式 其中&#xff0c;静态工厂方式…

通用权限管理系统组件 (GPM - General Permissions Manager) 权限管理以前我们都是自己开发,可是到下一个系统又不适用,又改,加上人员流动大,管理很混乱...

权限管理以前我们都是自己开发&#xff0c;可是到下一个系统又不适用&#xff0c;又改&#xff0c;加上人员流动大&#xff0c;管理很混乱 Ψ吉日嘎拉 采用通用权限管理系统&#xff0c;这些烦恼就少了很多了&#xff0c;很固定&#xff0c;很稳定。 权限管理系统是否支持按组织…

Mahout 介绍

1.Hbasek-means (G级别) 2.k-meansmr (T级别)1. 2.canopy 2.贝叶斯算法 决策&#xff0c;分类&#xff0c;文档分类3.推荐系统 4.图书推荐系统 1.需求 付完款的用户90%都要回到购物车看看自己买的东西是否少买/多买 猜你喜欢 购买组合 内部推荐系统测试jps查询 转载于:https:/…