2017-01-25 1 views
1

요청의 수명 동안 지속하는 클래스를 주입 AppContext는 싱글 톤이며 응용 프로그램의 수명 동안 만 존재하지만 DataContext는 현재 요청의 수명 동안 만 존재합니다.는 싱글은 I는 다음의 클래스와 ASP.NET 웹 애플리케이션이

그러나 DataContext는 AppContext 클래스의 생성자에 삽입되므로 요청간에 지속됩니다. 이로 인해 요청이 끝난 후에 DataContext가 삭제 될 때 문제가 발생합니다. 어떻게 올바른 인스턴스를 검색 할 수 있도록 AppContext 클래스 내에 DataContext를 삽입 할 수 있습니까?

+2

공용 생성자가있는 경우'AppContext'는 signelton은 어떻습니까? –

+1

발생한 문제는 일반적으로 [Captive Dependency] (http://blog.ploeh.dk/2014/06/02/captive-dependency/)라고하는 공통적 인 함정입니다. – Steven

+1

@ZoharPeled OP는 *** [*** Singleton Design Pattern] (https://en.wikipedia.org/wiki/Singleton_pattern)에 대한 이야기가 아니지만 일반적인 용어 인 ** Singleton Lifestyle **에 관한 이야기입니다. Dependency Injection과 IoC Container에 대해 이야기합니다. – Steven

답변

1

즉, AppContext의 전체 디자인이 유효하지 않으며 요청에 따라 살아야 함을 의미합니다. 은 현재 실제 요청 데이터 컨텍스트에 따라 달라집니다 ().

해결 방법으로 공유 논리를 포함하는 단일 클래스와 데이터 컨텍스트 및 공유 논리에 따라 달라지는 논리를 갖는 클래스로 분할합니다.

public class SingletonAppContext : ISingletonAppContext //as singleton 
{ 
    //Source code where no data context needed 
} 

public class RequestAppContext : IRequestAppContext 
{ 
    public RequestAppContext(ISingletonAppContext appContext, IDataContext dataContext) 
    { 
    } 

    //Source code where data context is needed 
} 
+0

더 생각하면할수록 더 좋아집니다. 나는 이것을 답으로 표시 할 것이지만 @Steven이 지적한 [Captive Dependency] (http://blog.ploeh.dk/2014/06/02/captive-dependency/) 기사를 읽을 가치가있다. – nfplee

관련 문제