2009-11-06 46 views
3

爲會話對象提供強類型訪問的最佳方式是什麼?我就準備打開選項嚴格,這是造成編譯器抱怨的直接訪問會話對象我懶的編程技術:爲會話對象提供強類型訪問

Dim blah As Integer = Session("Blah") 

我最初的想法是創建一個包裝了會議,並大力提供了一個類爲會話中存儲的信息鍵入屬性。但是,我不能決定該類是單例還是實例化,或者代碼應該駐留在哪裏(即在Web項目中或類庫中)。

我傾向於在我的班級圖書館的單身人士,但我不知道這是最好的解決方案,或者如果我失去了其他任何可能性。

建議的解決方案:

Public Class SessionAccess 
    Public Shared Property Blah(ByVal session As HttpSessionState) As Integer 
     Get 
      Return Convert.ToInt32(session("Blah")) 
     End Get 
     Set(ByVal value As Integer) 
      session("Blah") = value 
     End Set 
    End Property 
End Class 

代碼背後:

Dim blah As Integer = SessionAccess.Blah(session) 
+0

你爲什麼這樣做?你想解決什麼問題?這可能是有價值的。 :-D – Achilles 2009-11-06 17:16:17

+0

我正在把選項嚴格,以便開發人員B不會來,並在「Blah」中填充一個字符串,導致開發人員A寫入崩潰的代碼。把它放在一個開發人員使用的類中,它們都將「Blah」視爲一個整數。 – 2009-11-06 17:29:03

回答

1

要麼我的建議是「標準」的方式來做到這一點,要麼沒有人包裝他們的會話訪問權限,因爲這個問題還沒有收到很多答案。

我發現在this answer一個行提到建立一個SessionManager:

  • 總結ASP.NET會話與 SessionManager避免發展中的拼寫錯誤 等時 從會話引用項目。

我沒有想過沒有任何理由不使用單例類來提供對會話的類型化訪問,所以這是我在項目中使用的解決方案。

1

我刪除了我原來的答案,因爲@Jason Berkan取得了很好的點,當他問我的答案。傑森,我認爲這個想法很好。

我的代碼示例中唯一會改變的是檢查以確保會話變量存在。

+0

當然 - 示例中的代碼已被刪除。一旦進入一個類,就會添加對空值的檢查,並將「Blah」移動到一個字符串常量中。 – 2009-11-06 22:48:39