zoukankan      html  css  js  c++  java
  • ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)

    我们就接着上一篇继续说,上一篇中介绍了ConfigSection的结构和两个简单的DEMO,本篇就说一下SectionGroup、ConfigurationElementCollection和key/value pair configurationsection.

    的使用。

    1、SectionGroup的使用


    下面的代码简单的说明一下SectionGroup的使用:

    1)、首先定义一个继承ConfigurationSectionGroup的类:

       1:   /// <summary>
       2:   /// 自定义SectionGroup
       3:   /// </summary>
       4:      public class MySectionGroup:ConfigurationSectionGroup
       5:      {
       6:          [ConfigurationProperty("myBlog")]
       7:          public MySection MyBlog
       8:          {
       9:              get
      10:              {
      11:                  return (MySection)base.Sections["myBlog"];
      12:              }
      13:          }
      14:      }

    2)、其次,在定义一个继承ConfigurationSection的Section:

       1:  /// <summary>
       2:      /// 自定义Section
       3:      /// </summary>
       4:      public class MySection:ConfigurationSection
       5:      {
       6:          [ConfigurationProperty("name")]
       7:          public string BlogName
       8:          {
       9:              get
      10:              {
      11:                  return (string)base["name"];
      12:              }
      13:          }
      14:          [ConfigurationProperty("url")]
      15:          public string BlogUrl
      16:          {
      17:              get
      18:              {
      19:                  return (string)base["url"];
      20:              }
      21:          }
      22:      }

    下面再讨论一下怎么在web.config中如何配置和使用:

    web.config中的配置:

       1:  <configSections>
       2:          <sectionGroup name="myBlogs" type="KevinDiao.MySectionDemo01.MySectionGroup,KevinDiao.MySectionDemo01">
       3:              <section name="myBlog" type="KevinDiao.MySectionDemo01.MySection,KevinDiao.MySectionDemo01"/>
       4:          </sectionGroup>
       5:  </configSections>
       6:   
       7:  <myBlogs>
       8:      <myBlog name="五香瓜子" url="http://www.cnblogs.com/diaojia/"></myBlog>
       9:  </myBlogs>

    读取web.config中配置:

       1:   MySection mySection = ConfigurationManager.GetSection("myBlogs/myBlog") as MySection;
       2:   Response.Write("博客名称:" + mySection.BlogName + "<br/>");
       3:  Response.Write("博客地址:<a href='" + mySection.BlogUrl + "'>" + mySection.BlogUrl + "</a>");

    运行得到的结果:

    博客名称:五香瓜子
    博客地址:http://www.cnblogs.com/diaojia/ 
     

    2、ConfigurationElementCollection的使用


        下面再来讨论一下怎么在ConfigSections中配置自定义集合,我们还是用代码说明吧。

       1)、 首先定义一个继承ConfigurationElement的类。

       1:      /// <summary>
       2:      /// 自定义Element
       3:      /// </summary>
       4:      public class MyBlogElement:ConfigurationElement
       5:      {
       6:          [ConfigurationProperty("name")]
       7:          public string Name
       8:          {
       9:              get
      10:              {
      11:                  return (string)base["name"];
      12:              }
      13:          }
      14:          [ConfigurationProperty("url")]
      15:          public string Url
      16:          {
      17:              get
      18:              {
      19:                  return (string)base["url"];
      20:              }
      21:          }
      22:      }

    它主要包含要配置的主要内容。

    2)、其次定义一个继承ConfigurationElementCollection的类

       1:      /// <summary>
       2:      /// 自定义ElementCollection
       3:      /// </summary>
       4:      public class MyBlogElementCollection:ConfigurationElementCollection
       5:      {
       6:          protected override ConfigurationElement CreateNewElement()
       7:          {
       8:              return new MyBlogElement();
       9:          }
      10:          protected override object GetElementKey(ConfigurationElement element)
      11:          {
      12:              return ((MyBlogElement)element).Name;
      13:          }
      14:          public override ConfigurationElementCollectionType CollectionType
      15:          {
      16:              get
      17:              {
      18:                  return ConfigurationElementCollectionType.BasicMap;
      19:              }
      20:          }
      21:   
      22:          protected override string ElementName
      23:          {
      24:              get
      25:              {
      26:                  return "myBlog";
      27:              }
      28:          }
      29:          public MyBlogElement this[int index]
      30:          {
      31:              get
      32:              {
      33:                  return (MyBlogElement)BaseGet(index);
      34:              }
      35:              set
      36:              {
      37:                  if (BaseGet(index) != null)
      38:                  {
      39:                      BaseRemoveAt(index);
      40:                  }
      41:                  BaseAdd(index, this);
      42:              }
      43:          }
      44:      }

    3)、再次定义一个继承ConfigurationSection的类

       1:      /// <summary>
       2:      /// 自定义Section 
       3:      /// </summary>
       4:      public class MyBlogSection:ConfigurationSection
       5:      {
       6:          [ConfigurationProperty("name")]
       7:          public string Name
       8:          {
       9:              get
      10:              {
      11:                  return (string)base["name"];
      12:              }
      13:          }
      14:          [ConfigurationProperty("",IsDefaultCollection=true)]
      15:          public MyBlogElementCollection MyBlogCollection
      16:          {
      17:              get
      18:              {
      19:                  return (MyBlogElementCollection)base[""];
      20:              }
      21:          }
      22:   
      23:      }

    下面在看看怎么在web.config中如何配置:

       1:  <configSections>
       2:  <section name ="MyBlogs"  type="KevinDiao.MySectionDemo02.MyBlogSection,KevinDiao.MySectionDemo02"/>
       3:  </configSections>
       4:   <MyBlogs name="KevinDiao">
       5:      <myBlog name="五香瓜子" url="http://www.cnblogs.com/diaojia/"></myBlog>
       6:      <myBlog name="业精于勤" url="http://diaojia.blog.51cto.com/"></myBlog>
       7:    </MyBlogs>

    再看看怎么读取:

       1:   MyBlogSection mySection = ConfigurationManager.GetSection("MyBlogs") as MyBlogSection;
       2:   foreach (MyBlogElement item in mySection.MyBlogCollection)
       3:    {
       4:         Response.Write("博客名称:" + item.Name + "<br/>");
       5:         Response.Write("博客地址:<a href='" + item.Url + "'>" + item.Url + "</a>" + "<br/>");
       6:         Response.Write("-----------------------------------------------------------------<br/>");
       7:     }

    最后在看看运行的结果:

    博客名称:五香瓜子
    博客地址:http://www.cnblogs.com/diaojia/
    -----------------------------------------------------------------
    博客名称:业精于勤
    博客地址:http://diaojia.blog.51cto.com/
    -----------------------------------------------------------------

    3、key/value pair configurationsection的使用(例如:appSettings)


    最后在简单的说明一下在web.config中怎么使用key/value pair configurationsection。

    1)、首先定义一个继承ConfigurationElement的类

       1:      /// <summary>
       2:      /// 自定义ConfigurationElement
       3:      /// </summary>
       4:      public class MyBlogElement: ConfigurationElement
       5:      {
       6:          [ConfigurationProperty("name")]
       7:          public string Name
       8:          {
       9:              get
      10:              {
      11:                  return (string)base["name"];
      12:              }
      13:          }
      14:          [ConfigurationProperty("url")]
      15:          public string Url
      16:          {
      17:              get
      18:              {
      19:                  return (string)base["url"];
      20:              }
      21:          }       
      22:      }

    其实和在2、ConfigurationElementCollection的使用中的差不多。

    2)、其次在定义一个继承ConfigurationElementCollection的类:

       1:      /// <summary>
       2:      /// 自定义ConfigurationElementCollection
       3:      /// </summary>
       4:      public class MyBlogsElectionCollection:ConfigurationElementCollection
       5:      {
       6:          protected override ConfigurationElement CreateNewElement()
       7:          {
       8:              return new MyBlogElement();
       9:          }
      10:   
      11:          protected override object GetElementKey(ConfigurationElement element)
      12:          {
      13:              return ((MyBlogElement)element).Name;
      14:          }
      15:      }

    3)、再次就是定义一个继承ConfigurationSection的类

       1:      /// <summary>
       2:      /// 自定义Section
       3:      /// </summary>
       4:      public class MyBlogsSection : ConfigurationSection
       5:      {
       6:          [ConfigurationProperty("name")]
       7:          public string Name
       8:          {
       9:              get
      10:              {
      11:                  return (string)base["name"];
      12:              }
      13:          }
      14:          [ConfigurationProperty("",IsDefaultCollection=true)]
      15:          public MyBlogsElectionCollection MyBlogs
      16:          {
      17:              get 
      18:              {
      19:                  return (MyBlogsElectionCollection)base[""];
      20:              }
      21:          }
      22:      }

    下面在看看怎么在web.config中如何配置:

       1:  <configSections>
       2:   <section name="MyBlogs" type="KevinDiao.MySectionDemo03.MyBlogsSection,KevinDiao.MySectionDemo03"/>
       3:  </configSections>
       4:   <MyBlogs name="KevinDiao">
       5:      <add name="五香瓜子" url="http://www.cnblogs.com/diaojia/"></add>
       6:      <add name="业精于勤" url="http://diaojia.blog.51cto.com/"></add>
       7:   </MyBlogs>

    再看看怎么读取:

       1:   MyBlogsSection mySection = ConfigurationManager.GetSection("MyBlogs") as MyBlogsSection;
       2:    foreach (MyBlogElement item in mySection.MyBlogs)
       3:    {
       4:        Response.Write("博客名称:" + item.Name + "<br/>");
       5:        Response.Write("博客地址:<a href='" + item.Url + "'>" + item.Url + "</a>" + "<br/>");
       6:        Response.Write("-----------------------------------------------------------------<br/>");
       7:    }

    最后在看看运行的结果:

    博客名称:五香瓜子
    博客地址:http://www.cnblogs.com/diaojia/
    -----------------------------------------------------------------
    博客名称:业精于勤
    博客地址:http://diaojia.blog.51cto.com/
    -----------------------------------------------------------------
     
     

    最后在附上本篇的代码:DEMO

    REFERENCE FROM : http://www.cnblogs.com/diaojia/archive/2011/04/06/2007350.html

    参考:

    MSDN

  • 相关阅读:
    2.1.1 Speed Limit
    2.1.2 骑自行车的最短时间
    1.3.1提高实数精度的范例
    1.2.2一个数可以有多少种用连续素数之和表示
    求二倍关系的个数 1.2.1
    求平均值
    原生JS 购物车及购物页面的cookie使用
    基于Jquery的商城商品图片的放大镜效果(非组件)
    商城商品购买数量增减的完美JS效果
    弹性布局各种坑爹兼容
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/4155347.html
Copyright © 2011-2022 走看看