我正在使用ASP.net 3.5 MVC應用程序。如何將對象初始化爲僅用於一個會話的靜態對象
我有一個有ClassA的組件。 我有創建ClassA的
的對象另一個程序集現在的問題是,如何 並初始化對象爲靜態只爲一個會議。 對象在整個會話中將保持靜態。僅當新會話啓動時才應創建對象的新實例。另外,對於前一個會話,該對象應該可用於以前的輸入。
如何做到這一點?
我正在使用ASP.net 3.5 MVC應用程序。如何將對象初始化爲僅用於一個會話的靜態對象
我有一個有ClassA的組件。 我有創建ClassA的
的對象另一個程序集現在的問題是,如何 並初始化對象爲靜態只爲一個會議。 對象在整個會話中將保持靜態。僅當新會話啓動時才應創建對象的新實例。另外,對於前一個會話,該對象應該可用於以前的輸入。
如何做到這一點?
您可以使用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()
{
}
}
您可以使用global.asax中的Session_Start事件並將ClassA的實例放入會話中。然後,您可以從會話中讀取它,只要會話處於活動狀態,它就會是同一個用戶的同一個實例。
將物體包裝成單身人員等級。 Singleton類應該將緩存到Session中。執行延遲加載僅在第一次訪問然後緩存到會話中時創建對象。即使會話過期,這也可以工作。