zoukankan      html  css  js  c++  java
  • 使用ConfigurationManager来写自己的配置文件

    在.NET 1.1下,你必须用过实现IConfigurationSectionHandler接口来进行操作。

    但在.NET 2.0下,微软提供了一系列可以对配置文件进行操作的方法,而且非常强大,能够让你随便定义自己的配置节点。在开始之前我们先看看我们想写一个怎样的配置节:

      <configSections>
        
    <section name="MailSettings" type="MyBlog.MailSection, MyBlog" />
      
    </configSections>

    这个地方指定了我们想要写一个MailSettings的节,后面的type标识将会使用MyBlog这个assembly理的MyBlog.MailSection类来识别这个section。


    <MailSettings>
        
    <MailPlugins>
          
    <add name="Server" value="" />
          
    <add name="Title" value="" />
          
    <add name="Body" value="" />
        
    </MailPlugins>
      
    </MailSettings>

    这个地方有是我们自定义的一些配置了,value就是我们所需要的一些值。

    现在目标已经有了,下面就是怎么去用这些API来读出我们需要的值:

    首先很自然我们需要MailSettings的这个section,于是我们定义类:

        public sealed class MailSection : ConfigurationSection
        
    {

        }

    一个ConfigurationSection可以有自己的一些attribute,这些网上资料很多,我就不详解了。我关心的是下面的MailPlugins这层,这层在配置文件上被称为ConfigurationElementCollection,也就是一些ConfigurationElement的集合。那么我们先定义所需要的ConfigurationElement:

        public sealed class MailPluginElement : ConfigurationElement
        
    {
            [ConfigurationProperty(
    "name", IsRequired = true, IsKey = true)]
            
    public string Name
            
    {
                
    get return (string)this["name"]; }
                
    set this["name"= value; }
            }


            [ConfigurationProperty(
    "value", IsRequired = true)]
            
    public string Value
            
    {
                
    get return (string)this["value"]; }
                
    set this["value"= value; }
            }


        }


     接着是定义这个ConfigurationElement的集合:

        public sealed class MailPluginElementCollection : ConfigurationElementCollection
        
    {
            
    protected override ConfigurationElement CreateNewElement()
            
    {
                
    return new MailPluginElement();
            }


            
    protected override object GetElementKey(ConfigurationElement element)
            
    {
                
    return ((MailPluginElement)element).Name;
            }

        }

    默认的抽象类是让我们必须override上面的两个保护方法。但是这样是不能满足我们的要求的,我们希望用add key 和 value这种形式来配置:

            public override ConfigurationElementCollectionType CollectionType
            
    {
                
    get
                
    {
                    
    return ConfigurationElementCollectionType.AddRemoveClearMap;
                }

            }

     这里相当重要!需要使用AddRemoveClearMap来确保配置处理节能够识别<add key="" value="" />,如果配置为别的会报给你add节无法识别的错误!

    那么最后我们一个常用的功能没有提供:索引器!于是我们再加上:

            public MailPluginElement this[int index]
            
    {
                
    get return BaseGet(index) as MailPluginElement; }
            }


            
    public new MailPluginElement this[string name]
            
    {
                
    get return BaseGet(name) as MailPluginElement; }
            }

    那么ConfigurationElementCollection告一段落了,现在就是把这些东西塞进ConfigurationSection了:

        public sealed class MailSection : ConfigurationSection
        
    {
            [ConfigurationProperty(
    "MailPlugins")]
            
    public MailPluginElementCollection MailPlugins
            
    {
                
    get return (MailPluginElementCollection)base["MailPlugins"]; }
            }

        }

    注意这里的ConfigurationProperty这个Attribute,里面的字符串就是你在配置节里的那个element group节点。当然如果你想省事的话你可以定义为"",这样上面的配置文件就变为:

    <MailSettings>
          
    <add name="Server" value="" />
          
    <add name="Title" value="" />
          
    <add name="Body" value="" />
      
    </MailSettings>

    最后便是如何使用了:

            public string GetConfigValue(string name)
            
    {
                MailSection mailSection 
    = System.Configuration.ConfigurationManager.GetSection("MailSettings"as MailSection;

                MailPluginElementCollection mailInfos 
    = mailSection.MailPlugins;

                
    return mailInfos[name].Value;
            }
  • 相关阅读:
    HDU 4709 3-idiots FFT 多项式
    多项式的黑科技
    JZYZOJ 2043 多项式除法和取余 NTT 多项式
    JZYZOJ 2042 多项式逆元 NTT 多项式
    网络爬虫(4)--正则表达式
    网络爬虫(3)--Beautiful页面解析
    网络爬虫(2)--异常处理
    网络爬虫(1)--准备工作
    PCL库配置出现的问题(WIN10+VS2013)
    QT笔记(1)--QT编程环境搭建
  • 原文地址:https://www.cnblogs.com/cxd4321/p/650395.html
Copyright © 2011-2022 走看看