私が最も願っている機能の1つRazorEngine vNextはテンプレートアセンブリを別のAppDomain
にロードするためのサポートです。必要なときにアセンブリをアンロードできます。素晴らしい機能要求ですが、テンプレートに挿入できるモデルタイプに制約を導入するというノックオン効果があります。AppDomain境界を越えた匿名オブジェクトのプロキシ
現在のv2.1リリースの優れた機能の1つは、モデルとして匿名タイプを使用できることです。テンプレートのモデルタイプが匿名型であると判断する作業を行い、基本テンプレートをTemplateBase<dynamic>
と設定します。実行時バインダは、モデルメンバーの遅延呼び出しを注意して処理します。とても素敵です。
別のAppDomain
でテンプレートを実行するサポートを導入した場合、モデルは[Serializable]
(継承によって暗示されているタイプ)のみであるという制約があります(MarshalByRefObject
を暗示しています)。匿名型はシリアル化されず、private
です。
私は、何らかの理由でモデルに呼び出しを送信するテンプレートベース(テンプレートが実行されているドメインではなく、呼び出し元のドメインにある)にプロキシモデル(dynamic
と宣言)を作成することが考えられます。
テンプレート:本質的には
<h1>@Model.Name</h1>
ような何かをするだろう@Model.Name
への呼び出し:
Template.Model (ModelProxy) -> GetMember(Name) -> |BOUNDARY| -> Model.Name
は誰もが知っているか、プロキシコールにしようとする最善の方法と経験を持っています別のAppDomain
の匿名(またはdynamic
オブジェクト)に?
重要なことに、私は匿名オブジェクトをAppDomain
境界に押し込もうとしているわけではありません。
私はあなたに答えがありますが、ここに投稿できるより複雑です...私はそれを試して凝縮するだろうが、ソースは私のブログに行く...私はそれを説明する方法を見つけるとき。ちょっとしたものがいくつかあります...うわー...最初にそれらを試して修正しよう。 – Buildstarted