目前,我们在使用HttpContext.Current.Items时遇到了一个问题,在服务器环境中,开发人员的本地环境不显示任何问题(所有工作都如预期的那样),我们突然松掉了放置在其中的项(获取NullReferenceException)。
我在下面概述了一些代码和用法:
Global.asax我们在BeginRequest初始化工厂:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Items["Key"] = new Factory();
}在BaseControl中,我们有一个属性可以轻松地检索工厂:
public Factory Factory
{
get { return HttpContext.Current.Items["Key"] as Factory; }
}在UserControl中,我们通过基本属性使用它:
protected void Page_Load(object sender, EventArgs e)
{
Product p = Factory.CreateProduct();
}环境信息:
对于所有本地开发人员(我们正在与6人合作这个项目),上面描述的代码没有问题。然而,一旦我们将代码部署到测试服务器,使用工厂中断的位置(ea,HttpContext.Current.Items为空)
发布于 2013-04-11 12:20:48
我可以想象只有一个场景,它的行为与您所描述的一样:在Global.asax文件中,测试服务器上的Inherits属性直接指向Sitecore.Web.Application,忽略了代码的执行。
您能否再次检查一下Global.asax文件是否以
<%@Application Language='C#' Inherits="My.Assembly.Namespace.Global" %>如果在开发环境中更改了Global.asax,但尚未部署到测试环境中,则可能会发生这种情况。
如果这不是问题,请尝试检查Application_BeginRequest是否在测试服务器上执行。它将给出一个答案:Factory是从未添加到HttpContext.Current.Items中,还是在请求处理期间从Items中删除。
发布于 2013-04-12 05:45:51
我注意到您对您的属性使用了与其类型相同的名称:
public Factory Factory {}也许这会引发一些意想不到的行为?
https://stackoverflow.com/questions/15948262
复制相似问题