如何创建包含集合的配置节
How to Create a Configuration Section That Contains a Collection
有一个很好的问答 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 and ConfigurationElementCollection, which of course is not possible in C#. The other approach I have found requires me to implement 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"];
}
}
}
有一个很好的问答 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 and ConfigurationElementCollection, which of course is not possible in C#. The other approach I have found requires me to implement 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"];
}
}
}