提供对会话对象的强类型访问

时间:2009-11-06 17:14:32

标签: asp.net vb.net session

提供对会话对象的强类型访问的最佳方法是什么?我打算开启Option Strict,这会导致编译器抱怨我直接访问会话对象的懒惰编程技术:

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)

2 个答案:

答案 0 :(得分:1)

我删除了原来的答案,因为@Jason Berkan在质疑我的答案时提出了一个非常好的观点。杰森,我觉得这个想法很好。

我在代码示例中唯一要改变的是检查以确保会话变量存在。

答案 1 :(得分:1)

我的提案是“标准”方式,或者没有人包装他们的会话访问权限,因为这个问题没有收到很多答案。

我确实在this answer中找到了一行提到创建SessionManager:

  • 用ASP.NET包装ASP.NET会话 SessionManager避免开发 拼写错误等 引用会话中的项目。

我没有想到任何理由不使用单例类来提供对会话的类型化访问,因此这是我在项目中使用的解决方案。