T4テンプレートを使用してページをレンダリングするWebアプリケーションがあります。 ページにはテキストなどのような単純なものを含めることができますが、カスタムメイドのモジュールも含めることができます。 これらのモジュールはHttpContext.Current
に依存しています。T4テンプレートの処理中にHttpContextにアクセスする
しかし、T4テンプレートは、私のWebアプリケーションとは異なるスレッド/ドメインで処理されます。そのため、私はそのプロセスでHttpContext.Current
にアクセスできません。
テンプレートの前処理で設定されたモジュールにHttpContextのプロパティを追加しようとしました。これは新しい問題を引き起こす。 T4エンジンでは、ページで使用されるすべてのクラスが[Serialized]
である必要があります。シリアライズできないSystem.Web.HttpContextクラスを除いて、これは問題ありません。
System.Runtime.Serialization.SerializationException:タイプアセンブリのSystem.Web、バージョン= 4.0.0.0で System.Web.HttpContext、 ニュートラル文化=、なPublicKeyToken = b03f5f7f11d50a3aは、シリアライズ をマークされていません。
ので、SerializationExeption
を解決するために、私たちは私たちの財産に[NonSerialized]
属性を追加すると思います。
[NonSerialized]
protected HttpContext _context = null;
public HttpContext Context
{
get
{
return _context;
}
set
{
_context = value;
}
}
しかし、時間によってテンプレートがデシリアライズされ、処理され、コンテキストがofcourseのnull
あるので、私は私のモジュールにNullReferenceException
を取得します。
テンプレートエンジンから呼び出されたコードで現在のHttpContext
にアクセスする方法はありますか?