如何创建C#会话对象包装器?

如何创建C#会话对象包装器?,c#,asp.net,session,iis,class-library,C#,Asp.net,Session,Iis,Class Library,我如何创建一个类库,在那里我可以像IIS会话对象那样获取和设置,在这里我使用var x=objectname(“key”)来获取值,或者objectname(“key”)=x来设置值?我想,你可以使用像dictionary这样的通用字典或类似的东西来实现这个效果。在访问不存在的项时,您必须编写一些包装器代码来添加对象,例如包装器中的自定义默认属性。通常,我只有一个静态类来包装会话数据并使其类型安全,如: public static class MySessionHelper { publ

我如何创建一个类库,在那里我可以像IIS
会话
对象那样获取和设置,在这里我使用
var x=objectname(“key”)
来获取值,或者
objectname(“key”)=x
来设置值?

我想,你可以使用像
dictionary
这样的通用字典或类似的东西来实现这个效果。在访问不存在的项时,您必须编写一些包装器代码来添加对象,例如包装器中的自定义默认属性。

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

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;
这就是你要找的吗

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


关于使用包装器类,我喜欢的另一件事是它记录了会话中存储的所有数据。接下来的程序员只需查看包装器类,就可以查看会话中存储的所有内容,这样您就不太可能多次存储相同的数据或重新蚀刻会话中已缓存的数据。

您可以使用类似的方法

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";

你想让你的对象和IIS对话,还是只是做一个类似的比较?你的问题具体是什么?如何向对象添加
[xxx]
支持?或者如何使对象在任何地方都可用?或实际上,我想为IIS会话编写一个替换程序,以便保存web服务器场的会话状态。我想以一种不必更改当前设置或使用会话的所有位置的方式来编写它,这就是为什么您应该通过我在下面发布的包装器类来完成它。应用程序确实不应该直接访问会话。包装类将使访问类型安全,并为您提供一个进行所有更改的中心点,以便您可以根据需要将会话交换到所选的数据存储区。更喜欢静态类。它使访问更容易。+1良好的模式。应该总是用来访问会话数据。很好的模式。唯一的批评是在类名前面加上“My”是不必要的噪音。制作一个静态的会话助手是一件非常痛苦的事情。当静态类散布在所有控制器上时,这使得单元测试非常困难。对于不必要的静态内容,我们有一个说法。“这就是为什么我们不能拥有美好的东西。”我很抱歉对一个旧的答案发表评论,但由于这本词典是在一个静态对象中,它是否有可能与web应用程序的其他用户共享?比如说,如果这个对象持有用户名,那会有问题吗?