我们目前看到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();
}
环境信息:
- 本地 DEV 使用 IIS 7.5 和 8 以及 Sitecore 6.6 在 Windows 7 和 8 上运行
- 服务器正在使用 IIS 7.5 和 Sitecore 6.6 运行 Windows Server 2008 R2
对于所有本地开发人员(我们正在与 6 人一起进行此项目),上述代码没有问题。但是,一旦我们将代码部署到测试服务器,使用工厂中断的位置(HttpContext.Current.Items
即为空)