C# 什么';在ASP.Net中包装会话状态的首选方法是什么?

C# 什么';在ASP.Net中包装会话状态的首选方法是什么?,c#,asp.net,session-state,C#,Asp.net,Session State,我有一个使用会话状态的ASP.Net项目,我想对如何访问会话状态更严格一点,我不喜欢代码中所有的字符串。我还需要知道在会话状态中何时存储/更新特定值,以便跟踪该对象的最新值 使用常量很容易解决字符串问题,但这无助于跟踪。将它们封装在一个类中很有吸引力,但是我必须将session对象传递给该类,这看起来有点混乱 我正在考虑使用以下两种选择之一: 会话对象上的扩展getter和setter 会话对象上的一个扩展方法,用于返回具有getter和setter的类 第一部分给出了语法: var thing

我有一个使用会话状态的ASP.Net项目,我想对如何访问会话状态更严格一点,我不喜欢代码中所有的字符串。我还需要知道在会话状态中何时存储/更新特定值,以便跟踪该对象的最新值

使用常量很容易解决字符串问题,但这无助于跟踪。将它们封装在一个类中很有吸引力,但是我必须将session对象传递给该类,这看起来有点混乱

我正在考虑使用以下两种选择之一:

  • 会话对象上的扩展getter和setter
  • 会话对象上的一个扩展方法,用于返回具有getter和setter的类
  • 第一部分给出了语法:

    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
    

    处理这个问题的首选方法是什么?以上任何一项,换一种方式,或者我只是做错了吗?

    您不必将课程传递给每个班级,您可以:

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

    我相信这是典型的做法。具有静态可用的
    当前属性。

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

    谢谢,我考虑过了。我应该寻找如何从其他地方访问会话状态,而不是尝试扩展HttpSessionState对象。这不是我想要的,因为我有一些地方需要从控件访问,有时还需要从web访问services@baralong-实际上,我们的框架考虑了所有这些因素。从体系结构中的任何控件,您都可以通过专门用于该目的的属性和方法访问会话对象。我得说,一切都取决于你如何计划。