在.Net配置部分中使用相同元素的集合

时间:2009-08-18 13:33:49

标签: c# .net configuration collections

我感兴趣,如果可以在.Net配置中使用相同的元素集合。 像这样,例如:

                <RetrySettings>
                <RetryTurn PeriodBeforeRetry="0:05:00"/>
                <RetryTurn PeriodBeforeRetry="0:10:00"/>
                <RetryTurn PeriodBeforeRetry="0:30:00"/>
                <RetryTurn PeriodBeforeRetry="1:00:00"/>
                <RetryTurn PeriodBeforeRetry="4:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
                <RetryTurn PeriodBeforeRetry="8:00:00"/>
            </RetrySettings>

不向每个id="someUniqueId"成员添加恼人的RetryTurn属性?

我没有看到如何使用从ConfigurationElementCollection派生的自定义集合来实现这一目标...任何可能的解决方案?

3 个答案:

答案 0 :(得分:10)

最后我找到了解决方法。 在RetryTurn类中定义内部Guid属性UniqueId,并使用默认构造函数中的新Guid值对其进行初始化:

public class RetryTurnElement : ConfigurationElement
{
    public RetryTurnElement()
    {
        UniqueId = Guid.NewGuid();
    }

    internal Guid UniqueId { get; set; }

    ...
}

RetryTurnCollection类覆盖GetElementKey方法中,如下所示:

    public class RetryTurnCollection : ConfigurationElementCollection
{
    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((RetryTurnElement)element).UniqueId;
    }
    ...
}

答案 1 :(得分:4)

你试过吗

public class RetryTurnCollection : ConfigurationElementCollection
{
    protected override object GetElementKey(ConfigurationElement element)
    {
        return element;
    }
    ...
}

答案 2 :(得分:0)

您无法使用PeriodBeforeRetry属性作为唯一标识符吗? GetElementKey()会返回object,因此这不应该是个问题。

除非我误解了这个问题。