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