扩展ASP.NET 2.0资源提供程序模型(2)
会注意到有关此项实现的一些内容:
• 只支持全局资源。替换随 ASP.NET 2.0 一起免费提供的页面资源模型没有意义。从外部程序集只能得到全局资源。 • 我们无法从 ExternalResourceProviderFactory 访问 LocalResXResourceProvider。这是无法从代码构建的内部类型。如果我们用 ExternalResourceProviderFactory 替换默认提供程序,则只有全局资源会受到支持(我将在以后章节讨论一种替代方法)。 • ResourceManager 用于访问资源。默认 ResourceManager 已经为我们提供了一种从程序集访问资源的方法,因此我们无需替换此项访问外部资源的功能。 现在,我将说明此项实现的重点。 相同的本地化表达式,不同的使用案例 请记住,资源提供程序是因本地化表达式和本地化 API 而被调用的。要访问外部资源,将使用显式表达式。这些表达式将与用于访问全局资源的表达式类似,只有少许变化;尤其是程序集名称必须与资源类型一起提供。默认提供程序知道如何找到全局资源程序集。此外部资源提供程序依赖程序集名称以获得相同的结果。 默认提供程序模型(显式全局资源)的 $Resources 表达式语法如下。
配置 ExternalResourceProviderFactory 时,可使用同一表达式访问外部资源,语法变化如下。
例如,要从 CommonResources.dll 程序集、全局资源类型“CommonTerms”检索资源,将使用以下显式表达式。
编译页面时,将生成以下代码。
这说明只要提供了正确的信息,外部资源提供程序模型就能通过本地化 API 利用现有表达式和代码。最后将由 ExternalResourceProvider 将信息从资源类型解析为单独的程序集名称。 ExternalResourceProviderFactory 同 DBResourceProviderFactory 一样,ExternalResourceProviderFactory 继承 ResourceProviderFactory 并能替换 CreateGlobalResourceProvider() 和 CreateLocalResourceProvider()。列表 4 显示了完整实现。 列表 4. 实现 ExternalResourceProviderFactory
CreateGlobalResourceProvider() 负责通过提供的类密钥实例化 GlobalExternalResourceProvider 类型。请记住,此提供程序的类密钥必须包括程序集名称和资源类型。由于我们不在外部程序集中存储本地资源,因此 CreateLocalResourceProvider() 会引发 NotSupportedException。如果在页面上使用本地化表达式,实际上会导致解析异常。因此,如果想继续支持本地资源,这可能不是挂接 ExternalResourceProvider 的理想方案。随后,我将说明如何通过自定义的本地化表达式避免此问题。 要将 ExternalResourceProviderFactory 与现有表达式和本地 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |