快速业务通道

扩展ASP.NET 2.0资源提供程序模型(2)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
隔的任意内容 — 包括应用程序设置、连接字符串和本地化表达式。这类表达式的语法如下所示。

<%$ [prefix]: [declaration] %>

如您所知,本地化表达式使用前缀“Resources”。页面分析程序使用 ResourceExpressionBuilder 类型处理这些表达式。原因是 ResourceExpressionBuilder 已被映射到前缀“Resources”作为 <expressionBuilders> 的运行时默认配置。

<expressionBuilders>
<add expressionPrefix="Resources" type="System.Web.Compilation.ResourceExpressionBuilder, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</expressionBuilders>

对于编译页面,其工作原理如下所示:

• 分析页面时,将调用表达式生成器的 ParseExpression 操作以验证表达式语法。如果表达式无效(例如,无法找到特定资源),则将产生分析错误。

• 如果分析成功,则将调用表达式生成器的 GetCodeExpression 操作以请求为表达式生成代码。表达式生成器即在此为页面初始化生成代码。代码将注入页面的已编译 IL。

禁用页面编译时,表达式以一种略有不同的方式进行判断。您可以禁用单个页面的页面编译。

<%@ Page Language="C#" CompilationMode="Never" %>

或者您可以在 Web.config 文件中禁用所有页面的编译。

<pages compilationMode="Never" />

在此情况下,请求页面时,将对该页面进行分析;分析期间将检查表达式生成器的 SupportsEvaluate 属性,以查看页面是否可以不编译即进行处理。不生成页面代码。

在运行时,会再次验证 SupportsEvaluate,随后调用 EvaluateExpression,以检索每个本地化表达式的值。

ResourceExpressionBuilder 从 ExpressionBuilder 派生而来。ExpressionBuilder 是公开抽象和虚拟方法的公共基类,它由 ResourceExpressionBuilder 实现,以支持页面分析、代码生成以及表达式判断。因此,要支持自定义本地化表达式,可扩展 ExpressionBuilder 并提供自己的实现。

扩展 ExpressionBuilder

要支持自定义本地化表达式,您需要自定义表达式生成器实现。与 ResourceExpressionBuilder 一样,您可以扩展 ExpressionBuilder 并为未编译页面提供页面分析、代码生成以及表达式判断的自定义实现。

首先,让我们回顾一下此示例中自定义表达式生成器的用途以及有关其实现的预期语法。目标是完整保留 <%$ Resources %> 的默认实现,同时支持从外部程序集得到的资源。要实现上述目标,我们将创建新的表达式来处理此问题,而不是完全替换资源提供程序。这意味着我们需要新的表达式前缀、自定义 ExpressionBuilder 和将此新前缀与自定义 ExpressionBuilder 相关联的方法。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号