尝试在Web.config中创建自定义部分

时间:2017-09-18 16:16:17

标签: c# web-config

我正在尝试在web.config中创建自定义部分。我的web.config中有一个自定义类和一个声明部分。

当我运行我的代码但是我收到此错误“...不会从System.Configuration.IConfigurationSectionHandler'继承。”

MSDN文档声明此界面现已弃用 我不明白发生了什么冷 仅供参考我使用此(http://blogs.perficient.com/microsoft/2017/01/4-easy-steps-to-custom-sections-in-web-config/作为我的指南来创建我的自定义部分。

Here is my web.config    



<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name ="BDKConfigs" type="SPS.CardDecryption.Services.BDKConfigs" allowLocation="true" allowDefinition="Everywhere" />
  </configSections>

Here is my custom section in the web.config      



 <BDKConfigs>
        <!--collection-->
        <BDK>
          <!--elements-->
          <add name="IDTechPublicBDK" value="0123456789ABCDEFFEDCBA9876543210"/>
          <add name="IDTechProdBDK" value=""/>
         </BDK>
    </BDKConfigs>

this is my custom class      


using System.Configuration;

namespace myNameSpace
{
    //This class reads the defined config section (if available) and stores it locally in the static _Config variable.  

    public class BDKConfigs 
    {
        public static BDKConfigsSection _Config = ConfigurationManager.GetSection("BDKConfigs") as BDKConfigsSection;

        public static BDKElementCollection GetBDKGroups()
        {
            return _Config.BDKConfigs;
        }


    }

     public class BDKConfigsSection : ConfigurationSection
    {
        //Decorate the property with the tag for your collection.
        [ConfigurationProperty("BDK")]
        public BDKElementCollection BDKConfigs
        {
            get { return (BDKElementCollection)this["BDK"]; }
        }
    }

    //Extend the ConfigurationElementCollection class.
    //Decorate the class with the class that represents a single element in the collection. 
    [ConfigurationCollection(typeof(BDKElement))]
    public class BDKElementCollection : ConfigurationElementCollection
    {
        public BDKElement this[int index]
        {
            get { return (BDKElement)BaseGet(index); }
            set
            {
                if (BaseGet(index) != null)
                    BaseRemoveAt(index);

                BaseAdd(index, value);
            }
        }

        protected override ConfigurationElement CreateNewElement()
        {
            return new BDKElement();
        }

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

    //Extend the ConfigurationElement class.  This class represents a single element in the collection. 
    //Create a property for each xml attribute in your element.  
    //Decorate each property with the ConfigurationProperty decorator.  See MSDN for all available options.
    public class BDKElement : ConfigurationElement
    {
        [ConfigurationProperty("name", IsRequired = true)]
        public string Name
        {
            get { return (string)this["name"]; }
            set { this["name"] = value; }
        }

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

    }
}

2 个答案:

答案 0 :(得分:2)

问题是我在web.config中指定了错误的类型。当我将web.config更改为

type =&#34; SPS.CardDecryption.Services.BDKConfigsSection,就像一个魅力。

答案 1 :(得分:0)

我已经更新了答案:

 public class BDKConfigsSection : ConfigurationSection
{
    [ConfigurationProperty("BDK")]
    public BDKElementCollection BDKConfigs
    {
        get { return (BDKElementCollection) base["BDK"]; }
    }
}

[ConfigurationCollection(typeof(BDKElement))]
public class BDKElementCollection : ConfigurationElementCollection
{
    public BDKElement this[int index]
    {
        get { return (BDKElement)BaseGet(index); }
        set
        {
            if (BaseGet(index) != null)
                BaseRemoveAt(index);

            BaseAdd(index, value);
        }
    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new BDKElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((BDKElement)element).Name;
    }
    public override ConfigurationElementCollectionType CollectionType
    {
        get { return ConfigurationElementCollectionType.BasicMapAlternate; }
    }
    protected override string ElementName => "BDKItem";
}

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

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

}

一个正常工作:

  <BDKConfigsSection>
<BDK>
  <BDKItem name="IDTechPublicBDK" queryString="0123456789ABCDEFFEDCBA9876543210"/>
  <BDKItem name="IDTechProdBDK" queryString=""/>
</BDK> </BDKConfigsSection>