自定义配置处理程序的问题 - 元素<myelement>在本节中只出现一次</myelement>

时间:2013-04-26 19:02:12

标签: c# xml app-config

所以我正在编写一个自定义配置处理程序,允许我为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");

1 个答案:

答案 0 :(得分:0)

这是使用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");
相关问题