2010-11-21 3 views
1

J'ai lu sur les modèles et j'essaie d'implémenter le SingletonMa mise en œuvre singleton est-elle correcte? C#

Ma mise en œuvre est-elle correcte? Comment puis-je l'améliorer? Il y a tant de mise en œuvre sur le web ............

public sealed class SingletonProxy 
     { 
      private static IInfusion instance; 

      static SingletonProxy() { } 

      SingletonProxy() { } 

      public static IInfusion Instance 
      { 
       get 
       { 
        if(instance == null) 
        { 
         instance = XmlRpcProxyGen.Create<IInfusion>(); 
        } 
        return instance; 
       } 
      } 
     } 
+2

Il n'est pas thread-safe. – Ani

+0

Pourquoi ce n'est pas thread-safe et comment le modifieriez-vous? – Gigapr

+0

Comme d'autres l'ont souligné, vous devriez lire la page de Jon Skeet sur ce sujet. Verrouiller, ou mieux encore, revérifier le verrouillage, aiderait ici. – Ani

Répondre

2

... et il y a tellement de questions identiques sur SO, et tant de gens qui estiment que this article fournit la meilleure solution !

+0

+1. Je vais d'habitude avec la 2ème version (simple thread-safety) –

1

Puisque nous avons maintenant la classe System.Lazy, je tends à utiliser cette implémentation:

public sealed class SingletonProxy 
{ 
    private static readonly Lazy<IInfusion> instance 
      = new Lazy<IInfusion>(XmlRpcProxyGen.Create<IInfusion>); 

    public static IInfusion Instance 
    { 
     get { return instance.Value; } 
    } 
}