2009-11-06 49 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