2010-08-14 53 views
3

我有一个使用会话状态的ASP.Net项目,我想更加严格一点,我们如何访问会话状态,我不喜欢所有在代码中浮动的字符串。我还需要知道何时在会话状态下存储/更新特定值以跟踪该对象的最新值。在ASP.Net中包装会话状态的首选方式是什么?

字符串问题很容易使用常量来解决,但它无助于跟踪。将它们封装在一个单一类是有吸引力的,但我必须通过会话对象的那类,这似乎有点凌乱

我想使用的两个选项之一:

  1. 扩展getter和setter对会话对象
  2. 对会话对象扩展方法与getter和setter

第一个给我的语法返回一个类:

​​

第二得出:

var thing = Session.Wrapper().Thing; 
Session.Wrapper().Thing = thing; 

两者都有自己的申诉,不过,我倾向于第二种。在理想的世界中,我希望能够做到这一点:

var thing = Session.Thing(); // easy to do 
Session.Thing() = thing; // don't think it's possible 

处理这个问题的首选方式是什么?其他任何一种方式,或者我只是做错了?

回答

3

您不必通过列席会议,每个类,你可以有:

public class State 
{ 
    public string Something 
    { 
     get { return HttpContext.Current.Session["Something"] as string; } 
     set { HttpContext.Current.Session["Something"] = value; } 
    } 
} 

这一点,我相信,这是典型的做法。 HttpContext拥有静态可用的Current属性。

+0

谢谢,我一直在想它。我应该寻找如何从别处访问会话状态,而不是试图扩展HttpSessionState对象。 – baralong 2010-08-14 00:49:54

1

我的首选方法是将所有需要访问的变量放入一个对象中。然后,我在页面的基类中放入一个变量,该变量为会话中的对象提供适当的访问权限。真正实施这种方法的唯一方式是提供一个标准,要求使用此对象,然后编码/同行评审以确保各种字符串/变量不会最终阻塞会话。

+0

不完全是我之后,因为我有一些地方需要通过控件访问,有时来自Web服务 – baralong 2010-08-14 00:55:59

+0

@baralong - 实际上,我们的框架将所有这些考虑在内。从体系结构中的任何控件中,您都可以通过我们的属性和方法专门为此目的获得会话对象。我会说,这完全取决于你如何规划一切。 – 2010-08-14 01:28:55