3

如何创建一个类库,我可以在其中获取和设置,就像我用来获取值或设置值的 IISSession对象一样?var x = objectname("key")objectname("key") = x

4

3 回答 3

10

通常我只有一个静态类来包装我的会话数据并使其类型安全,例如:

public static class MySessionHelper
{
    public static string CustomItem1
    {
        get { return HttpContext.Current.Session["CustomItem1"] as string; }
        set { HttpContext.Current.Session["CustomItem1"] = value; }
    }

    public static int CustomItem2
    {
        get { return (int)(HttpContext.Current.Session["CustomItem2"]); }
        set { HttpContext.Current.Session["CustomItem2"] = value; }
    }

    // etc...
}

然后,当我需要获取或设置项目时,您只需执行以下操作:

// Set
MySessionHelper.CustomItem1 = "Hello";

// Get
string test = MySessionHelper.CustomItem1;

这是你要找的吗?

编辑:根据我对您问题的评论,您不应直接从应用程序中的页面访问会话。包装类不仅可以使访问类型安全,还可以为您提供进行所有更改的中心点。通过使用包装器的应用程序,您可以随时轻松地将 Session 换成您选择的数据存储,而无需更改使用该会话的每个页面。

我喜欢使用包装类的另一件事是它记录了存储在会话中的所有数据。下一个程序员可以通过查看包装类来查看存储在会话中的所有内容,因此您多次存储相同数据或重新获取已缓存在会话中的数据的机会更少。

于 2010-02-23T21:57:01.430 回答
5

我想,您可以使用类似Dictionary<string, Object>或类似的通用字典来实现此效果。在访问不存在的项目时,您必须编写一些包装器代码来添加对象,例如通过包装器中的自定义默认属性。

于 2010-02-23T21:53:04.997 回答
2

你可以使用这样的东西

public class Session
{
    private static Dictionary<string, object> _instance = new Dictionary<string, object>();
    private Session()
    {            
    }

    public static Dictionary<string, object> Instance
    {
        get
        {
           if(_instance == null)
           {
               _instance = new Dictionary<string, object>();
           }
            return _instance;
        }
    }
}

并像这样使用它

Session.Instance["key"] = "Hello World";
于 2010-02-23T21:57:55.983 回答