2010-02-23 60 views
3

如何创建一个类库,我可以像IIS Session对象那样获取并设置对象,其中我使用var x = objectname("key")来获取值或objectname("key") = x来设置值?如何创建一个C#会话对象包装?

+0

你希望自己的对象交谈IIS或者你只是作出类似的比较? – 2010-02-23 21:51:48

+0

你的问题具体是什么?如何为你的对象添加'[xxx]'支持?或者如何使物体到处都可用?要么 ... ? – 2010-02-23 21:55:54

+0

Acrtally,我想写一个替代IIS会话,所以我可以保存Web场的会话状态。我想以一种不会改变当前设置或使用会话的所有地方的方式编写它。 – Mike 2010-02-24 14:42:23

回答

9

通常我只是有围绕我的会话数据,并使其类型安全就像一个静态类:

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选择为您选择的数据存储,而无需更改每个使用该会话的页面。

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

+0

更像静态类。它使访问更容易。 – 2010-02-23 22:26:05

+0

谢谢。这非常有帮助。 – Mike 2010-02-25 01:25:01

+0

静态类非常好 – 2010-02-25 05:08:45

5

我想,你可以使用像Dictionary<string, Object>或类似的通用字典来实现这种效果。当你通过Wrapper中的自定义默认属性访问非existend项目时,你将不得不编写一些包装代码来添加一个Object。

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

我对一个旧的答案发表评论表示歉意,但是由于这本词典是在一个静态的对象中,是否有可能与其他的网络应用用户共享?比方说,如果这个对象拥有用户名,那会是一个问题吗? – Dave 2015-01-27 17:11:31