2009-11-05 26 views
0

我正在使用ASP.net 3.5 MVC應用程序。如何將對象初始化爲僅用於一個會話的靜態對象

我有一個有ClassA的組件。 我有創建ClassA的

的對象另一個程序集現在的問題是,如何 並初始化對象爲靜態只爲一個會議。 對象在整個會話中將保持靜態。僅當新會話啓動時才應創建對象的新實例。另外,對於前一個會話,該對象應該可用於以前的輸入。

如何做到這一點?

回答

1

您可以使用HTTP模塊(命中每次)與一些關鍵的(唯一的會話檢查應用程序對象,也許你可以在使用的SessionID +東西鍵)。我們這樣做是爲了訪問前一個會話的對象,如果我們不想這樣做,那麼我們可以設置一些不是唯一的特定會話的密鑰。

現在,當模塊被擊中,並且我們在特定會話的應用程序對象中找不到任何對象時,我們將創建該對象,並將此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的實例放入會話中。然後,您可以從會話中讀取它,只要會話處於活動狀態,它就會是同一個用戶的同一個實例。