2009-08-18 10 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> 

RetryTurnメンバーに迷惑id="someUniqueId"属性を追加せず:例えばこのよう 、?

ConfigurationElementCollectionから派生したカスタムコレクションを使用して、これを作成する方法がわかりません...これに対する解決策はありますか?

+1

なぜあなたはidenを望むでしょうか設定値は?設定ファイルは、キーと値のペアのためのものです。それらは鍵を持っていません。 –

+0

私は反復する可能性のあるコレクションだけが必要です。 また、これはmy tech.specで次のように指定されています。 :) –

答えて

10

最後に回避策が見つかりました。 RetryTurnクラスで 内部GuidプロパティUniqueIdを定義し、デフォルトコンストラクタで新しいGuid値で初期化:このようなRetryTurnCollectionクラスのオーバーライドGetElementKey方法で

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

    internal Guid UniqueId { get; set; } 

    ... 
} 

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

安全のために 'lock'オブジェクトで' static int nextId = 0; 'を使うこともできると思います。コンストラクタで' UnqiueId = nextId ++; 'をセットすると、あなたのIDはGuids of a順不同。 – Thymine

0

PeriodBeforeRetry属性を固有の識別子として使用できませんでしたか? GetElementKey()objectを返します。問題ではないはずです。

質問を誤解していない限り、

+0

「PeriodBeforeRetry」は、値が一意である必要がないため、一意の識別子として使用できません。つまり、同じ値のPeriodBeforeRetryを持つ複数のRetryTurn要素が1つのコレクションに存在する可能性があります。 –

4

あなたは

public class RetryTurnCollection : ConfigurationElementCollection 
{ 
    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return element; 
    } 
    ... 
} 
を試してみました
関連する問題