我有一个使用会话状态的ASP.Net项目,我想对如何访问会话状态更加严格,我对代码中浮动的所有字符串感到不满意。我还需要知道何时在会话状态中存储/更新特定值以跟踪该对象的最新值。
使用常量很容易解决字符串问题,但它对跟踪没有帮助。将它们全部封装在一个类中是有吸引力的,但是我必须将会话对象传递给该类,这看起来有点混乱
我正在考虑使用以下两个选项之一:
第一个给出了语法:
var thing = Session.GetThing();
Session.SetThing(thing);
第二个给出:
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
处理此问题的首选方法是什么?这些中的任何一种,另一种方式,还是我只是做错了?
答案 0 :(得分:3)
您不必将会话传递给每个班级,您可以:
public class State
{
public string Something
{
get { return HttpContext.Current.Session["Something"] as string; }
set { HttpContext.Current.Session["Something"] = value; }
}
}
我相信这是典型的做法。 HttpContext具有静态可用的Current
属性。
答案 1 :(得分:1)
我首选的方法是将所有需要访问的变量放入一个对象中。然后我在页面的基类中放入一个变量,该变量提供对会话中对象的适当访问。真正执行此操作的唯一方法是提供一个标准,该标准需要使用此对象,然后进行代码/同行评审,以确保杂项字符串/变量不会最终阻塞会话。