2014-01-27 2 views
1

나는 C#에서 싱글 톤에 존 소총의 위대한 가이드를 사용하고 여기 발견인스턴스화 싱글은 변수

Implementing the Singleton Pattern in C# - 내가 할 노력하고있어 (여섯 번째 버전을 사용하여 .NET 4의 게으른 타입)

프로그램 전체의 다른 클래스에서 사용하는 구성 자료가 들어있는 참조 클래스를 만듭니다. (설정, 테마 등)

클래스는 ClientContext 개체 (범위 TenantID 등) 예를 들어

의해 제공되는 몇몇 변수에 대한 의존도를 갖는 참조

는 설정 오브젝트가 데이터베이스에 저장되며 현재 범위의 설정을 가져 오려면 TenancyID가 필요합니다.

어떻게 Singleton 패턴을 올바르게 사용하지만 변수가 전달 될 때까지 인스턴스화를 지연합니까? 존의 예에서는

부록

, 그것을 변수 공급 될 수없는 전용 정적 클래스에 기초하여 그 자체를 인스턴스화.

private static readonly Lazy<Singleton> lazy = 
    new Lazy<Singleton>(() => new Singleton()); 

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

TenantID를 나타내는 GUID를 개인 정적 읽기 전용 변수에 어떻게 공급합니까?

+1

당신이 원하는 것은 싱글 톤입니까? 현재 클라이언트 컨텍스트의 값에 따라 다르면 다른 요청/클라이언트가 시작될 때마다 자체 클라이언트 컨텍스트 대신 해당 값을 가져옵니다. 물론 그 경우가 아니라면 인스턴스의 getter에서 자물쇠로 모든 컨텍스트를 잡을 수 있기 때문에 처음 몇 가지 예제가 가장 쉬운 방법이라고 생각합니다. – Mark

답변

1

싱글 톤 인스턴스를 Lazy<T>으로 만들 수 있습니다. 액세스를 시도 할 때까지 인스턴스화되지 않습니다. 더 많은 예제를 보려면 look here.

편집 : 방금 Jon Skeet이 심지어 in his guide이라고 부르는 것을 깨달았습니다.

+1

질문을 읽지 않는 기술은 꽤 재미 있습니다. 방금 Op가 수행 한 링크를 참조했습니다 ... –

+0

하지만 Singleton.Instance 또는 Singleton.Instance.Property를 호출 할 때 인스턴스가 자체를 트리거하는 것처럼 보입니다. 자체적으로 제공 할 수없는 해당 인스턴스에 속성을 어떻게 제공합니까? ? – Wesley

+0

'.Instance' 속성을 private으로 만들고'GetInstance (...) '와 같은 공용 메소드를 추가하고 그 메소드가'Lazy '에 접근하도록 할 수 있습니다. 그렇게하면 메서드가 해당 속성을 제공 할 수 있습니다. –