2009-07-05 9 views
0

複雑なワンタイム初期化を持つ静的フィールドのペアがあります。私はこの初期化が遅れて起きるようにしたい、aaa標準singleton pattern多変量の複雑なシングルトン

ただし、初期化手順には両方のフィールドが含まれているため、2つの異なるシングルトンに分割することはできません。

これを処理する最善の方法は何ですか?

答えて

0

私は現在、このようにそれをやっている:

class OuterType { 
    //... 

    static class FieldInitializer { 
     public static readonly SomeType field1, field2; 

     static FieldInitializer() { 
      //Complicated code that sets both fields together 
     } 
    } 

    //... 
} 

誰もが任意の他のアイデアを持っていますか?

+0

私はこれらの2つのフィールドが実際にクラスに属していると確信しています。一緒に初期化する必要がある場合は、一緒に使用され、問題のドメインまたは解決のドメインのいずれかの概念を表す可能性が高いようです。 –

+0

参照:http://www.yoda.arachsys.com/csharp/singleton.html 5番目のオプション。あなたは基本的にすでにそれをやっています。 –

1

'シングルトン'の両方への参照を含むラッパークラスを作成し、そのクラスをシングルトンにしますか?

補遺:(

  • は、個々のシングルトンをカプセル化する新しいシングルトンを作成します。
    本当にこのアプローチと間接の第二のレベルを避けたい場合は、常に2つの段階でそれを行うことができます
  • すべてのシングルトンがアトミックに初期化されることを保証するために、結合されたシングルトンから初期化される元のシングルトン(別々のバッキングフィールドを持つ)ごとにシングルトンを作成します。