如何创建一个类库,我可以像IIS Session
对象那样获取并设置对象,其中我使用var x = objectname("key")
来获取值或objectname("key") = x
来设置值?如何创建一个C#会话对象包装?
回答
通常我只是有围绕我的会话数据,并使其类型安全就像一个静态类:
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-23 22:26:05
谢谢。这非常有帮助。 – Mike 2010-02-25 01:25:01
静态类非常好 – 2010-02-25 05:08:45
我想,你可以使用像Dictionary<string, Object>
或类似的通用字典来实现这种效果。当你通过Wrapper中的自定义默认属性访问非existend项目时,你将不得不编写一些包装代码来添加一个Object。
你可以使用一些这样的事
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";
我对一个旧的答案发表评论表示歉意,但是由于这本词典是在一个静态的对象中,是否有可能与其他的网络应用用户共享?比方说,如果这个对象拥有用户名,那会是一个问题吗? – Dave 2015-01-27 17:11:31
- 1. 无法创建一个会话对象
- 2. BOOL包装?创建一个“BOOL”值的对象。 (Objective-C)
- 3. Powershell创建会话对象
- 4. 如何C#创建一个空对象
- 5. 如何创建一个对象,C#
- 6. 如何在一个对象内创建一个对象c#
- 7. 如何使用会话ID创建会话对象?
- 8. 如何在jsp中创建会话对象和会话变量?
- 9. JNI:如何处理包装的C++对象的创建/删除
- 10. 创建一个会话
- 11. 创建一个新对象覆盖现有会话(modbus)
- 12. 在会话中保存一个已经创建的对象
- 13. 只为python中的所有对象创建一个会话
- 14. 在C/C++中创建已包装库的Python对象?
- 15. 在C++中为C风格对象创建透明包装类
- 16. 创建一个包装类
- 17. 如何检查会话对象是否包含任何对象?
- 18. 如何在一个对象内创建一个javascript对象?
- 19. 在C#中创建一个geoJson对象
- 20. Mathematica如何创建一个InterpolatingFunction对象?
- 21. 如何创建一个eventdispatcher对象
- 22. `new`如何创建一个对象?
- 23. javascript如何创建一个对象?
- 24. 如何创建一个列表(包含对象)persistent
- 25. 如何使用spring创建自定义用户会话对象
- 26. SWIG包装从Python创建的C++对象过早删除
- 27. 创建一个包含许多关联对象的对象
- 28. 在包含对象值的对象中创建一个数组
- 29. 在C#中创建会话#
- 30. 如何创建一个包
你希望自己的对象交谈IIS或者你只是作出类似的比较? – 2010-02-23 21:51:48
你的问题具体是什么?如何为你的对象添加'[xxx]'支持?或者如何使物体到处都可用?要么 ... ? – 2010-02-23 21:55:54
Acrtally,我想写一个替代IIS会话,所以我可以保存Web场的会话状态。我想以一种不会改变当前设置或使用会话的所有地方的方式编写它。 – Mike 2010-02-24 14:42:23