【发布时间】:2012-02-15 15:32:52
【问题描述】:
我们有一个使用 T4 模板来呈现页面的 Web 应用程序。
页面可以包含简单的内容,例如文本等,但它们也可以包含定制的模块。
这些模块依赖于HttpContext.Current。
但是,T4 模板是在与我的 web 应用程序不同的线程/域中处理的。这就是为什么我无法在该过程中访问HttpContext.Current。
我尝试将 HttpContext 的属性添加到模块中,该属性是在模板的预处理中设置的。这引入了一个新问题;
T4 引擎要求页面使用的所有类都是[Serialized]。这个没问题,除了不能序列化的System.Web.HttpContext类。
System.Runtime.Serialization.SerializationException:类型 程序集 System.Web 中的 System.Web.HttpContext,版本=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 未标记 可序列化。
因此,为了解决 SerializationExeption 问题,我们将 [NonSerialized] 属性添加到我们的属性中。
[NonSerialized]
protected HttpContext _context = null;
public HttpContext Context
{
get
{
return _context;
}
set
{
_context = value;
}
}
但是当模板被反序列化和处理时,上下文当然是null,所以我在我的模块中得到一个NullReferenceException。
有没有办法可以在从模板引擎调用的代码中访问当前的HttpContext?
【问题讨论】:
标签: c# c#-4.0 t4 template-engine httpcontext