.NET Beans + request scope - 是否可行?

3
我有一个网络应用程序。当用户发起请求(也就是访问某个页面)时,我需要创建一个对象来存储一些信息(这些信息从数据库中获取),每个请求都要更新数据,并且每个用户都有自己的对象(因此UserA和UserB不会共享相同的对象)。
我通常使用Java和一些Web框架(如Struts、Spring和JSF),可以创建具有请求范围的JavaBeans对象,并将它们设置为整个应用程序可见。我的意思是:
public class iContext
{
    public iContext()
    {
        Response.Write(myBeans.Title());
    }    
}

每次都创建MyBeans实例并不是必须的。我考虑将对象放在会话中,但我更希望摆脱这种做法(事实上,我应该每次检查、替换、删除或插入对象,并执行大量查询 :))。

在.NET 3.5和C#中,有什么策略可以做到这一点吗?


我不理解“对于每个请求和每个用户”这个短语。是否可能同一个请求涉及多个用户 - Heinzi
@Heinzi:我的意思是每个请求(即每个用户)的对象必须是唯一的。抱歉! - markzzz
1
如果您使用的是ASP.NET MVC,我会建议您使用ModelBinding并在请求中发送强类型对象。在Webforms中,情况要麻烦一些,因为它们抽象了网络;但是您可以使用ViewState。 - George Stocker
@George Stocker : 能举个例子吗? - markzzz
@markzzz:在Webforms中,每次postback都会创建一个新的请求。您需要该值跨postback保持不变吗? - Heinzi
显示剩余2条评论
1个回答

3
在ASP.Net中,了解页面的生命周期非常重要。如果你理解这一点,你可以在页面的(pre)init阶段使用HttpContext.Items[]字典对象来填充自定义上下文类。无论你在哪里加载需要保留在内存中的数据,都可以将其添加到上下文类中,并在任何时候在页面的范围内使用HttpContext,因为它始终可用。

很想知道这个类是如何工作的!实际上这正是我需要理解和学习的;谢谢你的提示,我会尝试搜索相关信息... - markzzz
但是这个HttpContext.Items[]对于web应用程序上的每个用户是共享的吗?还是每个用户都有自己独立的HttpContext.Items[]?(这是我需要的) - markzzz
尝试过 HttpContext.Current.Items["page"] = myObject;。看起来已经存储了。唯一的问题是每次需要使用该对象时,我都需要使用 protected MyObject myObject= (MyObject)(HttpContext.Current.Items["page"]);,这很烦人 :) - markzzz
好的,使用 HttpContext.Current.Items 解决了问题。事实上,我真的不知道它是如何工作的:如果它对整个应用程序可见,应该是“静态”的。但事实上它并不是静态的... - markzzz
@markzzz:HttpContext.Current确实是静态的:http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx - Heinzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接