2015-02-05 3 views
0

개체 컨텍스트를 만드는 클래스가 있습니다. 객체 생성을 관리하기 위해 싱글 톤 패턴을 사용하고자합니다. 어떻게 C#에서 싱글 톤으로 다음과 같은 클래스 개체 생성 패턴을 만들 수 있습니까?다음 클래스의 싱글 톤 패턴을 만드는 방법

public abstract class EFContextBase<TContext> : IDisposable where TContext : ObjectContext, new() 
     { 
      private TContext _dataContext; 
       protected virtual TContext DataContext 
      { 
       get 
       { 
        if ((object)this._dataContext == null) 
         this._dataContext = Activator.CreateInstance<TContext>(); 
        return this._dataContext; 
       } 
      } 

    public EFContextBase() 
      { 
       this.DataContext.ContextOptions.LazyLoadingEnabled = true; 
      } 
       public void Dispose() 
      { 
       this.Dispose(true); 
       GC.SuppressFinalize((object)this); 
      } 
       private void Dispose(bool disposing) 
      { 
       if (!disposing || (object)this._dataContext == null) 
        return; 
       this._dataContext.Dispose(); 
       this._dataContext = default(TContext); 
      } 
     } 
+2

http://csharpindepth.com/articles/general/singleton.aspx 왜이가 만든 것 다른 싱글과 다른 것입니까? –

+0

답변 없음, 그냥 발언 : TContext에 new() 제약 조건을 지정했지만 Activator를 사용하여 인스턴스를 만들었습니다. –

+0

EFContextBase는 다중 처리를 피하기 위해 최선의 방법으로 처리하기위한 로컬 플래그 표시를 가져야합니다. –

답변

1

왜 추상 클래스 인 싱글 톤을 만드나요? 추상 클래스가 만들어져 다른 클래스에 상속되었습니다. 싱글 톤은 정적 메서드를 피하고 클래스를 인스턴스화 할 수있는 가능성을 유지하기위한 디자인 패턴입니다 (나중에 사용하기 위해). 당신은 당신의 아키텍처에 대해 생각해야합니다.

다음과 같은 방법으로 클래스 싱글해야 일반적으로

: : private static readonly <<YourClass>> singleton = new <<YourClass>>()

  • 공개 싱글 속성을 정의합니다

    1. 개인 변수를 정의 개인 생성자를 정의를
      public <<YourClass>> Singleton 
      { 
          get { return singleton; } 
      } 
      
  • 0

    1. 정적 생성자 초기화 (스레드 설계에 의한 안전) 스레드 안전 값을 반환
    2. 인스턴스 속성 게터 이중 잠금 : 기반으로 싱글 톤의 여러 고전적인 구현이다.
    3. .Net Lazy 래퍼 기반 속성 (생성자에서 스레드로부터 안전하도록 구성 할 수 있음).
    0

    위험을 감수하지 마십시오, 그것은 가장 잘 알고있는 한에서 얻을 :

    관련 문제