2009-11-05 5 views
0

ASP.net 3.5 MVC 응용 프로그램을 사용하고 있습니다.하나의 세션에 대해서만 정적으로 개체를 초기화하는 방법

ClassA가있는 어셈블리가 하나 있습니다. ClassA 객체를 만드는 또 다른 어셈블리가 있습니다

질문은 이제는 하나의 세션에 대해서만 정적으로 객체를 초기화하는 방법에 대해 설명합니다. 개체가 세션 전체에서 정적입니다. 새 세션이 시작될 때만 객체의 새 인스턴스를 만들어야합니다. 또한, 이전 세션에서 객체는 이전의 intance와 함께 사용할 수 있어야합니다.

어떻게 하시겠습니까?

답변

1

당신은 아마 당신이 내 세션 ID + 뭔가를 사용할 수 HttpModule을 (매번 명중) 세션에 대해 고유 한 몇 가지 핵심 (와 응용 프로그램 개체를 확인하는 사용할 수 있습니다 키). 이전 세션의 객체에 액세스하기 위해이 작업을하고 있습니다. 원하지 않는 경우를 대비하여 특정 세션에 고유하지 않은 키를 설정할 수 있습니다.

모듈이 공격을 받았고 특정 세션에 대해 Application Object에서 개체를 찾지 못하면 개체를 만들고이 HTTPModule 클래스에 정적으로 설정합니다.

다음 코드는 현재 세션에 대해 HTTPApplication 객체에 객체가없는 경우 도움이 될 수 있습니다. 이전 세션 객체가 필요 없으면 HTTPSession 객체를 사용하여 ClassA 객체의 가용성을 확인할 수도 있습니다. HTTPSession에서는 HTTPSession에 객체를 저장할 필요가 없습니다. 모듈 클래스에서이를 제공합니다).

HTTPModule 클래스에는 다음을 추가해야합니다. 응용 프로그램의 다른 클래스에서이 HTTPModule 클래스에서 액세스 할 수있는 정적 변수입니다.

/* HTTP Module Class */ 
public class SomeModuleClass 
{ 
    public static ClassA classA = null; 

    private void someFunctionOfModuleFiringEverytime() 
    { 
     /* if there is no instance of ClassA in HTTPApplication or HTTPSession object*/ 

     SessionManager sessionManager = new SessionManager(); 
     /* one object of SessionManager gives back one object of ClassA always*/ 
     classA = sessionManager.getClassA(); 
    } 
} 


/* an assembly which is making the Class A instance*/ 
public class SessionManager 
{ 
    private ClassA classInstance=null; 

    public ClassA getClassA() 
    { 
     if (classInstance == null) 
      classInstance = new ClassA(); 

      return classInstance; 
    } 
} 

/* class from another assembly*/ 
public class ClassA 
{ 
    public ClassA() 
    { 

    } 
} 
0

global.asax에서 Session_Start 이벤트를 사용하고 세션에 ClassA 인스턴스를 넣을 수 있습니다. 그런 다음 세션에서 해당 세션을 읽을 수 있으며 세션이 살아있는 한 동일한 사용자에 대해 동일한 인스턴스가됩니다.

관련 문제