代码之家  ›  专栏  ›  技术社区  ›  Jason Berkan whiteproud

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

  •  3
  • Jason Berkan whiteproud  · 技术社区  · 15 年前

    提供对会话对象的强类型访问的最佳方法是什么?我计划打开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 回复  |  直到 15 年前
        1
  •  1
  •   David    15 年前

    我删除了我的原始答案,因为@jason berkan在他质疑我的答案时提出了一个很好的观点。杰森,我觉得这个主意不错。

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

        2
  •  1
  •   Community CDub    8 年前

    要么我的建议是“标准”的方式,要么没有人对他们的会话访问进行包装,因为这个问题没有收到太多的答案。

    我确实找到了一条线 this answer 上面提到创建一个sessionmanager:

    • 用一个 会话管理器以避免开发 拼写错误等。 正在引用会话中的项。

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