2017-10-01 14 views
0

.NET 4's Lazy<T> typeメソッドを使用してシングルトンインスタンスを作成しています。しかし、私はあなたが私たちとあなたのクラスはシングルトンにする必要がある理由を共有することができシングルトンLazy singletonにパラメータを渡すGetInstance

public sealed class Singleton 
{ 
    private static readonly Lazy<Singleton> lazy = 
     new Lazy<Singleton>(() => new Singleton()); 

    public static Singleton Instance { get { return lazy.Value; } } 

    private Singleton() 
    { 
    } 
} 
+0

私はシングルトンパターンがあなたのユースケースには適していないと信じています。おそらく、代わりに工場パターンを試して、工場に適切に設定されたインスタンスを提供させることができます。 –

答えて

1

を返すプロパティInstanceにコンフィギュレーションファイルの3つのファイルのパスを渡したいですか?おそらくあなたはIoCコンテナを使うことができます。そのような場合、IoCセットアップでクラスのインスタンスが1つしかないことを保証できます。

シングルトンを本当に使いたいのであれば、おそらくinit/configメソッドを追加することを考えてください。インスタンスにアクセスする前にシングルトンを初期化する必要があります(存在しない場合は例外をスローします)。以下を見てください。私は、この解決策が嫌いです.Singletonクラスのユーザーはinitの手順について何らかの知識を必要とするからです。

public sealed class Singleton 
{ 
    private static readonly Lazy<Singleton> lazy; 

    public static Singleton Instance 
    { 
     get 
     { 
      if (lazy == null) 
      { 
       throw (...) 
      } 

      return lazy.Value; 
     } 
    } 

    private Singleton(int parameter) 
    { 
     ... 
    } 

    public static Init(int parameter) 
    { 
     if (lazy != null) 
     { 
      throw (...) 
     } 

     lazy = new Lazy<Singleton>(() => new Singleton(parameter)); 
    } 
} 
+0

IoCコンテナは、インスタンスが1回だけ存在することを保証できますか?私はこの概念に精通していません。 – liv2hak

+0

ええ、StructureMapのようなIoCコンテナでは、アプリケーションのブートストラップ時にIoCコンテナを指定できますhttp://structuremap.github.io/object-lifecycle/supported-lifecycles/ – jedgard

+0

@ liv2hak上記のコードを使用して管理しましたか、または決定しましたかIOCを使用する? –

関連する問題