类库探源——System.Configuration 配置信息处理

系统 1668 0

按照MSDN描述 System.Configuration 命名空间 包含处理配置信息的类型

本篇文章主要两方面的内容

1. 如何使用ConfigurationManager 读取AppSetting和ConnectionStrings

2. 如何使用自定义 Section,我这里的自定义Section格式为

      
        <
      
      
        SectionName
      
      
        >
      
      
        <
      
      
        services
      
      
        >
      
      
        

    服务1的描述信息,供IoC容器使用

    服务2的描述信息,供IoC容器使用

    。。。

  
      
      
        </
      
      
        services
      
      
        >
      
      
        </
      
      
        SectionName
      
      
        >
      
    

 

其实如果读者使用一些比较出名的IoC 框架(Unity)都会有配置管理,根本不用自定义Section,但是技多不压身,多了解点东西总是没错的。

 

一、ConfigurationManager 类

提供对客户端应用程序配置文件的访问。无法继承此类

命名空间: System.Configuration

程序集: System.Configuration.dll

继承关系:

原型定义:public static class ConfigurationManager

由上面的定义可以看出ConfigurationManager是一个静态类

 

静态属性:

1. ConfigurationManager.AppSettings      获取当前应用程序默认配置的 AppSettingsSection 数据

原型定义:public static NameValueCollection AppSettings { get; }

从上面的定义可以看出 AppSetting 是一个 键值对

 

2. ConfigurationManager.ConnectionStrings  获取当前应用程序默认配置的 ConnectionStringsSection 数据

例子:

app.config

        
           1
        
        
          <?
        
        
          xml version="1.0"
        
        
          ?>
        
        
           2
        
        
          <
        
        
          configuration
        
        
          >
        
        
           3
        
        
          <
        
        
          startup
        
        
          >
        
        
           4
        
        
          <
        
        
          supportedRuntime 
        
        
          version
        
        
          ="v2.0.50727"
        
        
          />
        
        
           5
        
        
          </
        
        
          startup
        
        
          >
        
        
           6
        
        
           7
        
        
          <
        
        
          connectionStrings
        
        
          >
        
        
           8
        
        
          <
        
        
          add 
        
        
          name
        
        
          ="KKSEntities"
        
        
           connectionString
        
        
          ="metadata=res://*/DbModel.csdl|res://*/DbModel.ssdl|res://*/DbModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX.XXX.XXX.XXX;initial catalog=KKS;user id=XXXX;password=KKKKK;multipleactiveresultsets=True;App=EntityFramework&quot;"
        
        
           providerName
        
        
          ="System.Data.EntityClient"
        
        
          />
        
        
           9
        
        
          </
        
        
          connectionStrings
        
        
          >
        
        
          10
        
        
          11
        
        
          <
        
        
          appSettings
        
        
          >
        
        
          12
        
        
          <
        
        
          add 
        
        
          key
        
        
          ="Aphasia"
        
        
           value
        
        
          ="www.cnblogs.com/Aphasia"
        
        
          />
        
        
          13
        
        
          </
        
        
          appSettings
        
        
          >
        
        
          14
        
        
          </
        
        
          configuration
        
        
          >
        
      
View Code

Program.cs

        
           1
        
        
          using
        
        
           System;


        
        
           2
        
        
          using
        
        
           System.Configuration;


        
        
           3
        
        
           4
        
        
          namespace
        
        
           ConsoleApplication1


        
        
           5
        
        
          {


        
        
           6
        
        
          class
        
        
           Program


        
        
           7
        
        
              {


        
        
           8
        
        
          static
        
        
          void
        
         Main(
        
          string
        
        
          [] args)


        
        
           9
        
        
                  {


        
        
          10
        
        
          string
        
         web = ConfigurationManager.AppSettings[
        
          "
        
        
          Aphasia
        
        
          "
        
        
          ];


        
        
          11
        
        
                      Console.WriteLine(web);


        
        
          12
        
        
          13
        
        
          string
        
         cnstr = ConfigurationManager.ConnectionStrings[
        
          "
        
        
          KKSEntities
        
        
          "
        
        
          ].ConnectionString;


        
        
          14
        
        
                      Console.WriteLine(cnstr);


        
        
          15
        
        
          16
        
        
                  }


        
        
          17
        
        
              }


        
        
          18
        
         }
      
View Code

效果:

 

二、 自定义Section

app.config

            
               1
            
            
              <?
            
            
              xml version="1.0"
            
            
              ?>
            
            
               2
            
            
              <
            
            
              configuration
            
            
              >
            
            
               3
            
            
              <
            
            
              configSections
            
            
              >
            
            
               4
            
            
              <
            
            
              section 
            
            
              name
            
            
              ="ServicesSection"
            
            
               type
            
            
              ="CustomDemo.ServicesSection,CustomDemo"
            
            
              />
            
            
               5
            
            
              </
            
            
              configSections
            
            
              >
            
            
               6
            
            
               7
            
            
              <
            
            
              ServicesSection
            
            
              >
            
            
               8
            
            
              <
            
            
              services
            
            
              >
            
            
               9
            
            
              <
            
            
              add 
            
            
              ServiceName
            
            
              ="XXX服务1"
            
            
               Impl
            
            
              ="XXX.Impl.XXXService1"
            
            
               Inter
            
            
              ="XXX.Inter.XXXInter1"
            
            
              />
            
            
              10
            
            
              <
            
            
              add 
            
            
              ServiceName
            
            
              ="XXX服务2"
            
            
               Impl
            
            
              ="XXX.Impl.XXXService2"
            
            
               Inter
            
            
              ="XXX.Inter.XXXInter2"
            
            
              />
            
            
              11
            
            
              <
            
            
              add 
            
            
              ServiceName
            
            
              ="XXX服务3"
            
            
               Impl
            
            
              ="XXX.Impl.XXXService3"
            
            
               Inter
            
            
              ="XXX.Inter.XXXInter3"
            
            
              />
            
            
              12
            
            
              </
            
            
              services
            
            
              >
            
            
              13
            
            
              </
            
            
              ServicesSection
            
            
              >
            
            
              14
            
            
              15
            
            
              <
            
            
              startup
            
            
              >
            
            
              16
            
            
              <
            
            
              supportedRuntime 
            
            
              version
            
            
              ="v2.0.50727"
            
            
              />
            
            
              17
            
            
              </
            
            
              startup
            
            
              >
            
            
              18
            
            
              </
            
            
              configuration
            
            
              >
            
          
View Code

Program.cs

        
           1
        
        
          using
        
        
           System;


        
        
           2
        
        
          using
        
        
           System.Configuration;


        
        
           3
        
        
           4
        
        
          namespace
        
        
           CustomDemo


        
        
           5
        
        
          {


        
        
           6
        
        
          class
        
        
           Program


        
        
           7
        
        
              {


        
        
           8
        
        
          static
        
        
          void
        
         Main(
        
          string
        
        
          [] args)


        
        
           9
        
        
                  {


        
        
          10
        
                     ServicesSection myServices = ConfigurationManager.GetSection(
        
          "
        
        
          ServicesSection
        
        
          "
        
        ) 
        
          as
        
        
           ServicesSection;


        
        
          11
        
        
          foreach
        
         (Service item 
        
          in
        
        
           myServices.ServiceItems)


        
        
          12
        
        
                      {


        
        
          13
        
                         Console.WriteLine(
        
          "
        
        
          ServiceName:{0} Impl:{1} Inter:{2}
        
        
          "
        
        
          , item.ServiceName, item.Impl, item.Inter);


        
        
          14
        
        
                      }


        
        
          15
        
        
                  }


        
        
          16
        
        
              }


        
        
          17
        
        
          18
        
        
          #region
        
        [自定义Section处理代码]


        
          19
        
        
          public
        
        
          class
        
        
           Service : ConfigurationElement


        
        
          20
        
        
              {


        
        
          21
        
        
          #region
        
        [当遇不能识别的元素时不让程序报错]


        
          22
        
        
          protected
        
        
          override
        
        
          bool
        
         OnDeserializeUnrecognizedAttribute(
        
          string
        
         name, 
        
          string
        
        
           value)


        
        
          23
        
        
                  {


        
        
          24
        
        
          return
        
        
          true
        
        
          ;


        
        
          25
        
        
                  }


        
        
          26
        
        
          protected
        
        
          override
        
        
          bool
        
         OnDeserializeUnrecognizedElement(
        
          string
        
        
           elementName, System.Xml.XmlReader reader)


        
        
          27
        
        
                  {


        
        
          28
        
        
          return
        
        
          true
        
        
          ;


        
        
          29
        
        
                  }


        
        
          30
        
        
          #endregion
        
        
          31
        
        
          32
        
        
          #region
        
        [节点元素]


        
          33
        
                 [ConfigurationProperty(
        
          "
        
        
          ServiceName
        
        
          "
        
        , IsRequired = 
        
          true
        
        
          )]


        
        
          34
        
        
          public
        
        
          string
        
        
           ServiceName


        
        
          35
        
        
                  {


        
        
          36
        
        
          get
        
         { 
        
          return
        
        
          this
        
        [
        
          "
        
        
          ServiceName
        
        
          "
        
        
          ].ToString(); }


        
        
          37
        
        
                  }


        
        
          38
        
        
          39
        
                 [ConfigurationProperty(
        
          "
        
        
          Impl
        
        
          "
        
        , IsRequired = 
        
          true
        
        
          )]


        
        
          40
        
        
          public
        
        
          string
        
        
           Impl


        
        
          41
        
        
                  {


        
        
          42
        
        
          get
        
         { 
        
          return
        
        
          this
        
        [
        
          "
        
        
          Impl
        
        
          "
        
        
          ].ToString(); }


        
        
          43
        
        
                  }


        
        
          44
        
        
          45
        
                 [ConfigurationProperty(
        
          "
        
        
          Inter
        
        
          "
        
        , IsRequired = 
        
          true
        
        
          )]


        
        
          46
        
        
          public
        
        
          string
        
        
           Inter


        
        
          47
        
        
                  {


        
        
          48
        
        
          get
        
         { 
        
          return
        
        
          this
        
        [
        
          "
        
        
          Inter
        
        
          "
        
        
          ].ToString(); }


        
        
          49
        
        
                  }


        
        
          50
        
        
          #endregion
        
        
          51
        
        
              }


        
        
          52
        
        
          53
        
        
          public
        
        
          class
        
        
           Services : ConfigurationElementCollection


        
        
          54
        
        
              {


        
        
          55
        
        
          protected
        
        
          override
        
        
           ConfigurationElement CreateNewElement()


        
        
          56
        
        
                  {


        
        
          57
        
        
          return
        
        
          new
        
        
           Service();


        
        
          58
        
        
                  }


        
        
          59
        
        
          protected
        
        
          override
        
        
          object
        
        
           GetElementKey(ConfigurationElement element)


        
        
          60
        
        
                  {


        
        
          61
        
        
          return
        
        
           ((Service)element).ServiceName;


        
        
          62
        
        
                  }


        
        
          63
        
        
              }


        
        
          64
        
        
          65
        
        
          public
        
        
          class
        
        
           ServicesSection : ConfigurationSection


        
        
          66
        
        
              {


        
        
          67
        
                 [ConfigurationProperty(
        
          "
        
        
          services
        
        
          "
        
        , IsDefaultCollection = 
        
          false
        
        
          )]


        
        
          68
        
        
          public
        
         Services ServiceItems { 
        
          get
        
         { 
        
          return
        
         (Services)
        
          base
        
        [
        
          "
        
        
          services
        
        
          "
        
        
          ]; } }


        
        
          69
        
        
              }


        
        
          70
        
        
          #endregion
        
        
          71
        
         }
      
View Code

效果:

本小节代码 下载

 

三、参考资料

1.  .net自定义configSections的5个示例

 

类库探源——System.Configuration 配置信息处理


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论