gpt4 book ai didi

c# - 如何创建包含集合的配置节

转载 作者:太空狗 更新时间:2023-10-29 20:04:30 25 4
gpt4 key购买 nike

有一个很好的问答 here这说明了如何创建自定义配置部分,该部分能够将以下形式的配置解析为 .Net 对象:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="CustomConfigSection" type="ConfigTest.CustomConfigSection,ConfigTest" />
</configSections>

<CustomConfigSection>
<ConfigElements>
<ConfigElement key="Test1" />
<ConfigElement key="Test2" />
</ConfigElements>
</CustomConfigSection>

</configuration>

我的问题是,有谁知道如何在没有 ConfigElements 元素的情况下创建相同的自定义配置部分?例如,将解析以下 CustomConfigSection 元素以代替上面显示的元素:

  <CustomConfigSection>
<ConfigElement key="Test1" />
<ConfigElement key="Test2" />
</CustomConfigSection>

我遇到的问题是,CustomConfigSection 类型似乎需要从两个 ConfigurationSection 继承。和 ConfigurationElementCollection ,这在 C# 中当然是不可能的。我发现的另一种方法要求我实现 IConfigurationSectionHandler ,自 .Net v2 起已弃用。有谁知道如何实现预期的结果?谢谢。

最佳答案

您不需要同时继承 ConfigurationSection 和 ConfigurationElementCollection。相反,像这样定义您的配置部分:

public class CustomConfigSection : ConfigurationSection
{
[ConfigurationProperty("", IsDefaultCollection = true)]
public MyConfigElementCollection ConfigElementCollection
{
get
{
return (MyConfigElementCollection)base[""];
}
}
}

还有你的配置元素集合:

[ConfigurationCollection(typeof(MyConfigElement), AddItemName = "ConfigElement"]
public class MyConfigElementCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new MyConfigElement();
}

protected override object GetElementKey(ConfigurationElement element)
{
if (element == null)
throw new ArgumentNullException("element");

return ((MyConfigElement)element).key;
}
}

和配置元素本身:

public class MyConfigElement: ConfigurationElement
{
[ConfigurationProperty("key", IsRequired = true, IsKey = true)]
public string Key
{
get
{
return (string)base["key"];
}
}
}

关于c# - 如何创建包含集合的配置节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com