2009-08-18 63 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; 
    } 
    ... 
} 
相關問題