2011-11-23 6 views
9

내 ASP.NET 응용 프로그램을 디버깅하기 위해 MessageHandling.cs이라는 클래스를 만들었습니다. 이 시점에서 그것은 싱글 톤 패턴이지만 요청 당 인스턴스가되기를 원합니다.HTTP 요청 당 클래스의 단일 인스턴스

내 클래스는 'Db connected', 'Data inserted'등과 같은 메시지로 MessagesHandling 클래스를 채 웁니다. apsx 페이지의 모든 이벤트가 처리 된 후 MessageHandling 클래스는 createFile.apsx.cs에 의해 Page_LoadComplete() 이벤트에서 읽습니다. 모든 오류와 메시지는 사용자에게 보여줄 것입니다.

이 시점에서 시스템은 디버깅을 위해 작동합니다. 이 시점에서 문제는 요청이 전송 된 후 MessageHandling이 비워지지 않으며 오류가 아무것도 수행하지 않고 두 번째 브라우저에도 표시된다는 것입니다. 또한 "블로그 생성"과 같이 최종 사용자에게 메시지를 표시하기 위해이 시스템을 사용할 수 있기를 원합니다.
Class AClass B
Class CClass B

는 사용자/세션/요청에 따라 아니기 때문에 싱글 톤이 작동하지 않습니다를 읽고 작성

내 문제의 기본은 다음과 같다. 그래서 다른 방법이 필요합니다.

+0

어디에서 처음으로 싱글 톤을 인스턴스화합니까? –

+0

mssqlDb가 처음 사용됩니다. 그래서 그것이 시작된 곳입니다. – h3rj4n

답변

4

HttpContext.Current 현재 요청에 대한 HttpContext 목적이다. object에서 object까지 IDictionaryItems 속성이 있습니다. 당신은 당신이 좋아하는 것을 그곳에 넣을 수 있고, 현재 요청에 묶일 것입니다.

-1

싱글 톤의 생성자에서 세션에 해당 객체가 있는지 확인할 수 있습니까? 그렇지 않다면 생성 한 다음 반환하십시오.

private Singleton() 
{ 
    // do whatever 
} 

public Singleton GetMySingleton() 
{ 
    if(HttpContext.Current.Items["MyCustomSingleton"] == null) 
     HttpContext.Current.Items["MyCustomSingleton"] = new Singleton(); 
    // 

    return (Singleton)HttpContext.Current.Items["MyCustomSingleton"]; 
} 
+0

그 코드 조각은 요청마다가 아니라 세션 당 캐시 할 것이다. – Bertvan

+0

예, 내 잘못입니다. 그 부분을 보지 못했습니다. – Miles

관련 문제