• C#如何使用和开发自定义配置节


    在日常的程序设计中,如何灵活和巧妙地运用配置信息是一个成功的设计师的首要选择。这不仅是为了程序设计得更灵活性和可扩展性,也是为了让你的代码给人以清新的感觉。程序中的配置信息一般放在应用程序的app.config或web.config文件中,当然也可以自定义自己的配置文件。这些配置文件是以XML格式进行存储和读取的。微软也封装一些对这些配置文件操作的类,这些类存在于名字空间System.Configuration下,这个命名空间包含提供用于处理配置数据的编程模型的类型,当然为了使用还添加System.Configuration.dll程序集。

       现在我们先看一下这个名字空间下的几个重要的类:

       1、ConfigurationManager,这个提供用于打开客户端应用程序集的Configuration对象。

       2、WebConfigurationMaManager,这个提供用于打开web应用程序集的Configuration对象。

       3、ConfigurationSection ,表示配置文件中的节。

       4、ConfigurationSectionCollection ,表示配置文件中相关节的集合。

       5、ConfigurationSectionGroup ,表示配置文件中的一组相关节。

       6、ConfigurationSectionGroupCollection ,表示 ConfigurationSectionGroup 对象的集合。

       7、ConfigurationProperty ,表示属性或配置元素的子元素。

       8、ConfigurationPropertyAttribute ,以声明方式指示 .NET Framework,以实例化配置属性。

       9、ConfigurationElement ,表示配置文件中的配置元素。

       10、ConfigurationElementCollection ,表示包含一个子元素集合的配置元素。

      当然这里面这常用的是ConfigurationManager类,这个类提供了两个静态常用的静态方法:

           object GetSection(string sectionName)用于读取当前应用程序默认配置的指定配置信息;

            Configuration OpenExeConfiguration(ConfigurationUserLevel userLevel)将当前应用程序配置文件打开以得到一个Configuration对象。

         以及两个静态属性:AppSettins获取当前应用程序默认配置的AppSettingsSection数据;ConnectionStrings获取当前应用程序默认配置的ConnectionStringSection数据。

         当然由于AppSettings是一个NameValueCollection对象,因此对它的读取和设置可以直接以AppSettings[“mySet”]的形式得到,相应的在*.config文件中的<appsettings>节下添加<add name=”mySet” value=””/>即可。

        要自定义配置节配置元素,就必须要使我们的类分别继承自ConfigurationSection和ConfigurationElement类。那么实现这个两个类的对象就可以加入到配置文件的<configSection>和其他元素节点中。

        这儿介绍在配置节点中加入自定义配置信息的能力(元素节点)。

        1、实现一个继承自ConfigurationElement和ConfigurationSection的类,并添加的配置属性加上ConfigurationPropertyAttribute特性。

        2、添加配置信息。

        3、在程序中读取配置信息。

    第一步:实现派生自ConfigurationSection和ConfigurationElement的类 

    using System;
    using System.Collections;
    using System.Text;
    using System.Configuration;
    using System.Xml;
     
     
    namespace MyCustomConfiguration
    {
       //自定义配置节
       public class CustomSectionConfiguration : ConfigurationSection
       { 
          public CustomSectionConfiguration() { }
          public CustomSectionConfiguration(string value) { }
          //添加特性ConfigurationPropertyAttribute
          //'customAttribute'是配置文件中的元素
          //'CustomAttribute'是程序中要的属性;
          [ConfigurationProperty("customAttribute", DefaultValue = "", IsRequired = true)]
          public string CustomAttribute
          {
              get { return (string)base["customAttribute"]; }
              set { base["customAttribute"] = value; }
             }
           //添加特性ConfigurationPropertyAttribute
           [ConfigurationProperty("customElement", DefaultValue = "", IsRequired = true)]
           public CustomElementConfiguration CustomElement
            {
               get { return (CustomElementConfiguration)base["customElement"]; }
               set { base["customElement"] = value; }
               }
        }
        
         //自定义配置元素
         public class CustomElementConfiguration : ConfigurationElement
         {
            public CustomElementConfiguration() { }
            public CustomElementConfiguration(string value1, string value2)
            {
                Value1 = value1;
                Value2 = value2;
             }
            [ConfigurationProperty("value1", DefaultValue = "", IsRequired = true)]
            public string Value1
           {
              get { return (string)base["value1"]; }
              set { base["value1"] = value; }
             }
              [ConfigurationProperty("value2", DefaultValue = "", IsRequired = true)]
              public string Value2
              {
                 get { return (string)base["value2"];}
                  set { base["value2"] = value; }
                 }
          
     }

    第二步:在*.config中设置自定的元素 

    <configuration> 
     
     <!-- 配置节--> 
       <configSections> 
         <sectionGroup name="customGroup"> 
           <section 
             name="customSection" 
             type="
     
     MyCustomConfiguration.CustomSectionConfiguration, MyCustomConfiguration, Version=1.0.0.0, Culture=neutral, 
     
     PublicKeyToken=null"   allowLocation="true"    allowDefinition="everywhere"  /> 
         </sectionGroup>
     
     …… 
       <!-- 配置节设置信息 --> 
       <customGroup> 
         <customSection customAttribute="Custom"> 
           <customElement Value1=”best" Vaule2=”better”/> 
         </customSection> 
       </customGroup> 
     
     ……
     
     </configuration>

    第三步:在程序中使用配置信息。 

    MyCustomConfiguration.CustomSectionConfiguration config = (MyCustomConfiguration.CustomSectionConfiguration)System.Configuration.ConfigurationManager.GetSection( "customGroup/customSection");

            首先得到配置节对象:         接着就可以使用强名称的对象和属性了。
     

    上面介绍的是单一属性的配置,如果要配置多个对象,那么就得使用System.Configuration.ConfigurationElementCollection,这类的作用是生成多个子对象,也就是在一个标签下可以放置多个System.Configuration.ConfigurationElement对象。

    方法同上,我们必须要重写几方法:

    ConfigurationElement CreateNewElement()//这个方法的作用是返回子对象实例;

    object GetElementKey(ConfigurationElement element);//这个方法的得到对象中的键名;

    ConfigurationElementCollectionType CollectionType{get;}//这个属性是定义映射方式;

    string ElementName{get;}//这个属性是定义XML元素的名字。

    protected override ConfigurationElement CreateNewElement()
    {
           return new CustomElementConfiguration ();
    }
    protected override object GetElementKey(ConfigurationElement element)
    {
         return ((CustomElementConfiguration )element).Name;
      }
    public override ConfigurationElementCollectionType CollectionType
      {
                get { return ConfigurationElementCollectionType.BasicMap; }
        }
    protected override string ElementName
    {
         get { return "collection"; }
    }
  • 相关阅读:
    把SVN和jenkins连起来--有人提代码就能自动build!
    Redis设置认证密码 Redis使用认证密码登录 在Redis集群中使用认证密码
    JwtAuthenticationTokenFilter 实现shiro 利用 token 信息完成令牌登录
    Jenkins war deploy Shell
    jenkins 不执行部署 tomcat
    CentOS 7 设置 svn 开机启动
    502 Bad Gateway nginx/1.12.2 tomcat
    shiro 集成 JWT 自动获取token对应的用户信息
    org.apache.shiro.session.UnknownSessionException: There is no session with
    多角色分库情况下shiro开发
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/4725069.html
Copyright © 2020-2023  润新知