【问题标题】:Issue with custom configuration handler - The element <myElement> may only appear once in this section自定义配置处理程序的问题 - 元素 <myElement> 在本节中可能只出现一次
【发布时间】:2013-04-21 01:02:56
【问题描述】:

所以我正在编写一个自定义配置处理程序,以允许我为 app-config 文件中的单个键分配多个值。我现在所拥有的作品,但仅适用于一个元素。我得到的错误是我尝试多次使用相同的元素,但是我知道这应该完全可以使用自定义配置处理程序。

任何见解将不胜感激

这是我的一些相关代码:App - Config

<configSections>
        <sectionGroup name="propertyValuesGroup">
          <section
            name="propertyValues"
            type="FlatFileTestCaseAutomater.ClaimHeaderSection,FlatFileFactory"
            allowLocation="true"
            allowDefinition="Everywhere"
          />
        </sectionGroup>
    <!-- Other <section> and <sectionGroup> elements. -->
  </configSections>

  <!-- Configuration section settings area. -->

  <propertyValuesGroup>
    <propertyValues>
      <claimHeader name="txnNo" nullable="yes" dataType="int" maxLength="20" />
      <claimHeader name="batchNo" nullable="yes" dataType="string" maxLength="20" />
    </propertyValues>
  </propertyValuesGroup>


</configuration>   

.

.

.

。 我的自定义配置处理程序类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Xml;

namespace FlatFileTestCaseAutomater
{
    class ClaimHeaderSection : ConfigurationSection
    {
        [ConfigurationProperty("claimHeader")]
        public ClaimHeaderElement ClaimHeaderProperty
        {
            get
            {
                return (ClaimHeaderElement)this["claimHeader"];
            }
            set
            { this["claimHeader"] = value; }
        }
    }





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

        [ConfigurationProperty("nullable", DefaultValue = "yes", IsRequired = true)]
        public String Nullable
        {
            get
            {
                return (String)this["nullable"];
            }
            set
            {
                this["nullable"] = value;
            }
        }

        [ConfigurationProperty("dataType", DefaultValue = "", IsRequired = true)]
        public String DataType
        {
            get
            {
                return (String)this["dataType"];
            }
            set
            {
                this["dataType"] = value;
            }
        }

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

    }

}

。 . . .

并调用值:

latFileTestCaseAutomater.ClaimHeaderSection config =
    (FlatFileTestCaseAutomater.ClaimHeaderSection)System.Configuration.ConfigurationManager.GetSection(
    "propertyValuesGroup/propertyValues");

【问题讨论】:

    标签: c# xml app-config


    【解决方案1】:

    这是一个使用 IConfigurationSectionHandler 的解决方案。

    请注意,我这样做很快,并没有进行适当的错误处理或空值检查。

    我使用了你的 app.config

    自定义处理程序代码

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Xml;
    
    namespace FlatFileTestCaseAutomater
    {
        class ClaimHeaderSection : IConfigurationSectionHandler
        {
    
            public object Create(object parent, object configContext, XmlNode section)
            {
    
                List<ClaimHeader> list = new List<ClaimHeader>();
                XmlNodeList claimNodeList = section.SelectNodes("claimHeader");
    
                foreach (XmlNode claimNode in claimNodeList)
                {
                    string name = claimNode.Attributes["name"].Value;
                    string nullable = claimNode.Attributes["nullable"].Value;
                    string dataType = claimNode.Attributes["dataType"].Value;
                    string maxLength = claimNode.Attributes["maxLength"].Value;
    
                    list.Add(new ClaimHeader() {Name = name, DataType = dataType, MaxLength = maxLength, Nullable = nullable});
    
                }
    
                return list;
            }
        }
    
    
        public class ClaimHeader
        {
            public String Name { get; set; }
            public String Nullable { get; set; }
            public String DataType { get; set; }
            public String MaxLength { get; set; }
        }
    
    }
    

    调用代码

            List<FlatFileTestCaseAutomater.ClaimHeader> config =
                 (List<FlatFileTestCaseAutomater.ClaimHeader>)System.Configuration.ConfigurationManager.GetSection(
                  "propertyValuesGroup/propertyValues");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2013-06-24
      • 2015-06-23
      • 2010-10-20
      相关资源
      最近更新 更多