2009-08-18 60 views
3

如果可以在.Net配置中具有相同元素的集合,我很感兴趣。 与此类似,例如:.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派生出来......对此有任何可能的解决方案?

+1

为什么你想要识别tical配置值?配置文件用于键/值配置对。那些没有钥匙。 – 2009-08-18 13:38:43

+0

我只想要一个有可能性迭代的集合。 另外,它在我的tech.spec中是这样指定的。 :) – 2009-08-18 13:46:22

回答

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

我想像你也可以使用'静态INT nextId = 0;'与安全'lock'对象,然后在设置构造'UnqiueId = nextId ++;'所以,那么你的ID将被责令INT的,而不是一个的GUID随机顺序。 – Thymine 2012-01-10 19:44:12

0

难道您不能使用PeriodBeforeRetry属性作为您的唯一标识符吗? GetElementKey()返回一个object,这应该不成问题。

除非我误解了这个问题。

+0

'PeriodBeforeRetry'不能被用作唯一的标识符,因为它是为唯一的值不是必须的,即几个'与'相同值RetryTurn'元件PeriodBeforeRetry'可以在一个集合存在。 – 2009-08-28 13:23:45

4

你试过

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