2016-03-25 13 views
0

Uygulamamda birkaç singleton sınıfına ihtiyacım var. Her birinin, onları kullanmak için başkalarının tekil sınıflarının bazı alanları vardır. Ben basit bir örnek üzerinde konuyu yeniden Aşağıda: alanlar boş olduğu içinBirbirinden farklı referans alanları içeren tekil sınıfları

public sealed class A 
{ 
    private B b = B.Instance; 

    private static readonly A instance = new A(); 
    public static A Instance { get { return instance; } } 
    static A() { } 
    private A() { } 

    public void Do() 
    { 
     b.ToString(); 
    } 
} 

public sealed class B 
{ 
    A a = A.Instance; 

    private static readonly B instance = new B(); 
    public static B Instance { get { return instance; } } 
    static B() { } 
    private B() { } 

    public void Do() 
    { 
     a.ToString(); 
    } 
} 


class Program 
{ 
    static B b = B.Instance; 
    static A a = A.Instance; 

    static void Main(string[] args) 
    { 
     b.Do(); 
     a.Do(); 
    } 
} 

Boş başvuru özel geliyor. Yani böyle birbirine bağlı tekil sınıflarını nasıl başlatıp kullanabilirim?

+1

Neden bunu yapmaya çalışıyorsunuz? - bağımlılık genellikle kötü tasarımın bir göstergesidir. – Thomas

cevap

0

Kurucular paralel olarak çalışmaz, böylece ilk oluşturulduğunda, ikinci Singleton henüz oluşturulmamıştır.

değere özelliğini ayarlayarak doğrudan olasılıkla sınıf B böyle bir şey yazmak istiyorum Yerine: Yani değer elde

private A AProp { 
    get { 
    if(a == null) 
     a = A.Instance; 

    return a; 
    } 
} 

Sen A sınıfı aynı başka yolu yuvarlak yaparım ilk erişime kadar ertelenir ve o sırada diğer Singleton zaten oluşturuldu.

Hangi senaryoda tam olarak böyle bir şey iyi bir fikirdir başka bir sorudur. Özellikle yerel bir alandan erişmek yerine, her zaman A/ı kullanarak her zaman erişebilirsiniz (böylece yerel alan bu noktada gereksiz hale gelir.

İlgili konular