2016-06-24 10 views
0

複数のクライアントで使用される、と私はそれについての質問があります。C#シングルトンは - 私は最近、Singletonパターンについて学んできた

次シングルトンを考える:

public class Singleton 
{ 
    private static readonly Lazy<Singleton> lazyInstance = 
     new Lazy<Singleton>(() => new Singleton(), true); 

    private Singleton() 
    { 
     // Stuff that must only happen once. 
     Console.WriteLine("Single ctor"); 
    } 

    public static Singleton Instance => lazyInstance.Value; 

    public static void DoSomething() 
    { 
     Console.WriteLine("Hello world!"); 
    } 

    public string Name { get; set; } 
} 

して、次のように同じアセンブリに住んでいるクライアント:

public class ClientA 
{ 
    public ClientA 
    { 
     var instance = Singleton.Instance; 
    } 
} 

public class ClientB 
{ 
    public ClientB 
    { 
     var instance = Singleton.Instance; 
    } 
} 

は、両方のクライアントが使用してしまいます同じシングルトンインスタンス?

私の実際の例ははるかに複雑で、最初のインスタンス化中にシングルトンクラスのいくつかのプロパティを設定するための長期実行操作があり、このシングルトンを使用するすべてのクライアントが同じインスタンスを使用していることを確認したい長時間実行される操作は1回だけ実行されます。

注:私の実際の世界の例では、クライアントクラスは既に私が制御できない基本クラスから派生しています。

+0

複数のインスタンスがある場合は、もはやシングルトン(定義による)ではありません。 – Servy

+0

なぜ複数のインスタンスが作成されると思いますか? – usr

答えて

1

new Lazy(()=> new Singleton()、true)は一度だけ実行されます。インスタンスは常に同じインスタンスを返します。

関連する問題