私は少し後で、この自分自身を試すことを期待してんだけど、今のところ、私はちょうど私の現在の考え共有しましょう:ウェブページでは
を、カミソリは、ASP.NETのビルドパイプでBuildProviderを登録することで動作します.cshtmlと.vbhtmlの場合
WebPagesは、.cshtml .vbhtml拡張子をハンドラに登録します。
WebPagesページが要求されると、System.Web.WebPages.WebPageHttpHandlerはパスをビルドパイプに渡します。ここで、拡張子は登録済みのRazor Providerと一致し、ページをレンダリングし、WebPageオブジェクトを戻します。 IISに渡され、処理されます。
反射ツールを使用している場合は、このすべてが表示されます。これらの両方は、対応するアセンブリのPreApplicationStartCode.Start()で実現されます。
そのビルドプロバイダーをフックレイザー:私たちは私たちをレンダリングするためにASP.NETパイプで別のBuildProviderを作成し、登録する必要があると思い上書きするにはWebPageHandler
public static void Start()
{
if (!_startWasCalled)
{
_startWasCalled = true;
WebPageHttpHandler.RegisterExtension("cshtml");
WebPageHttpHandler.RegisterExtension("vbhtml");
PageParser.EnableLongStringsAsResources = false;
DynamicModuleUtility.RegisterModule(typeof(WebPageHttpModule));
ScopeStorage.CurrentProvider = new AspNetRequestScopeStorageProvider();
}
}
をフック
public static void Start()
{
if (!_startWasCalled)
{
_startWasCalled = true;
BuildProvider.RegisterBuildProvider(".cshtml", typeof(RazorBuildProvider));
BuildProvider.RegisterBuildProvider(".vbhtml", typeof(RazorBuildProvider));
}
}
ウェブページページ。 System.Web.WebPagesはWebPageHttpHandler.RegisterExtension()メソッドを提供しています。理論的には、Razorの代わりにWebPageリクエストを受け取る別のBuildProviderをフックできます。
いくつかのブログはRegisterExtensionメソッドについて言及していますが、100%機能しないことを示すオープン接続バグレポートもあります。すべてをオーバーライドして、buildproviderをパイプにフックする方が適切かもしれません(メソッドを使用しないでください)。
Web.configはbuildProvidersを登録するための構造を提供していますので、私はそれを試してみます。
<buildProviders>
<add extension=".cshtml" type="CustomStuff.CustomBuildProvider"/>
</buildProviders>
挑戦はそこビューエンジンのほとんどはViewEngines.Register()、ウェブページを持っているように見えない概念を使用することです。だから、私たちはBuildProviderでこれらのビューエンジンをラップするか、またはIViewEngineを正常に呼び出すことができるBuildProviderを作成する必要があります。
もう一度、私の思考を共有してください。私は時間を見つけたらSparkか何かを登録しようとします。
新しいWebページエンジンとは何ですか? MVCを使ってそこでミックスしてマッチさせることはできませんか? – mellamokb
ASP.NETチームは、MVC3がそうでないようにasp.netのWebページが技術的にRazorに結びついていないことを明記しています(またReflectorで確認しています)。しかし、SparkのようなものをWebページに登録する方法の例は見当たりませんでした。チームのブログには、後でこれを訪問することが示されています。だから私はあなたにそれができることを奨励したいと思いますが、残念ながら達成のためのアドバイスはできません。 –
は私の現在の思考パターンで答えを加えました。もし私が時間を見つけることができたら、後でSparkをフックしようとします。あなたが提示した面白い問題 –