У нас есть веб-приложение, которое использует шаблоны T4 для рендеринга страниц.
Страницы могут содержать простые вещи, такие как текст и так далее, но они также могут содержать пользовательские модули.
Эти модули полагаются на HttpContext.Current
.
Однако шаблон T4 обрабатывается в потоке / домене, отличном от моего веб-приложения. И именно поэтому я не могу получить доступ к HttpContext.Current
в этом процессе.
Я попытался добавить свойство для HttpContext для модулей, которое устанавливается при предварительной обработке шаблона. Это вводит новую проблему;
Движок T4 требует, чтобы все классы, используемые страницей, были [Serialized]
. Это не проблема, за исключением класса System.Web.HttpContext, который нельзя сериализовать.
System.Runtime.Serialization.SerializationException: тип
System.Web.HttpContext в сборке System.Web, версия = 4.0.0.0,
Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a не отмечена
сериализации.
Итак, для решения SerializationExeption
мы добавим атрибут [NonSerialized]
к нашему свойству.
[NonSerialized]
protected HttpContext _context = null;
public HttpContext Context
{
get
{
return _context;
}
set
{
_context = value;
}
}
Но к тому моменту, как шаблон десериализован и обработан, контекст имеет null
курс, поэтому я получаю NullReferenceException
в моем модуле.
Есть ли способ получить доступ к текущему HttpContext
в коде, вызываемом из механизма шаблонов?