gpt4 book ai didi

c# - 如何让我的自定义配置部分表现得像一个集合?

转载 作者:可可西里 更新时间:2023-11-01 03:07:50 25 4
gpt4 key购买 nike

我需要如何编写自定义 ConfigurationSection以便它既是节处理程序又是配置元素集合?

通常,您有一个继承自 ConfigurationSection 的类, 然后它有一个继承自 ConfigurationElementCollection 的类型的属性,然后返回从 ConfigurationElement 继承的类型集合的元素.要对其进行配置,您将需要如下所示的 XML:

<customSection>
<collection>
<element name="A" />
<element name="B" />
<element name="C" />
</collection>
</customSection>

我想剪掉<collection>节点,并且只有:

<customSection>
<element name="A" />
<element name="B" />
<element name="C" />
<customSection>

最佳答案

我假设 collection 是您的自定义 ConfigurationSection 类的属性。

您可以使用以下属性装饰此属性:

[ConfigurationProperty("", IsDefaultCollection = true)]
[ConfigurationCollection(typeof(MyElementCollection), AddItemName = "element")]

您的示例的完整实现如下所示:

public class MyCustomSection : ConfigurationSection
{
[ConfigurationProperty("", IsDefaultCollection = true)]
[ConfigurationCollection(typeof(MyElementCollection), AddItemName = "element")]
public MyElementCollection Elements
{
get { return (MyElementCollection)this[""]; }
}
}

public class MyElementCollection : ConfigurationElementCollection, IEnumerable<MyElement>
{
private readonly List<MyElement> elements;

public MyElementCollection()
{
this.elements = new List<MyElement>();
}

protected override ConfigurationElement CreateNewElement()
{
var element = new MyElement();
this.elements.Add(element);
return element;
}

protected override object GetElementKey(ConfigurationElement element)
{
return ((MyElement)element).Name;
}

public new IEnumerator<MyElement> GetEnumerator()
{
return this.elements.GetEnumerator();
}
}

public class MyElement : ConfigurationElement
{
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get { return (string)this["name"]; }
}
}

现在您可以像这样访问您的设置:

var config = (MyCustomSection)ConfigurationManager.GetSection("customSection");

foreach (MyElement el in config.Elements)
{
Console.WriteLine(el.Name);
}

这将允许以下配置部分:

<customSection>
<element name="A" />
<element name="B" />
<element name="C" />
<customSection>

关于c# - 如何让我的自定义配置部分表现得像一个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388530/

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