【问题标题】:Provide strongly typed access to the session object提供对会话对象的强类型访问
【发布时间】:2009-11-06 17:14:32
【问题描述】:

提供对会话对象的强类型访问的最佳方式是什么?我打算打开 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)

【问题讨论】:

  • 你为什么要这样做?你想解决什么问题?那可能是有价值的。 :-D
  • 我设置了 Option Strict,这样开发人员 B 就不会出现并在“Blah”中填充字符串,从而导致开发人员 A 编写的代码崩溃。将它放在两个开发人员都使用的类中会迫使他们都将“Blah”视为整数。

标签: asp.net vb.net session


【解决方案1】:

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

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

【讨论】:

  • 当然 - 示例中的代码已被精简。一旦进入一个类,就会添加对空值的检查,并将“Blah”移动到一个字符串常量中。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多