快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
yType="CustomResourceProviders.DBResourceProviderFactory, CustomResourceProviders, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f201d8942d9dbbb1" />
</system.web>

注意 在所提供的示例代码中,DBResourceProviderFactory 归属于 CustomResourceProviders 程序集中的 CustomResourceProviders 命名空间。可以强命名程序集并将其安装到全局程序集缓存 (GAC) 中。

现在,将使用 DBResourceProviderFactory 创建页面解析期间和运行时的资源提供程序。

实现 IResourceProvider

资源提供程序模型的核心是资源提供程序类型。尽管 ResourceProviderFactory 是一个很重要的抽象形式,但资源提供程序最终还是要负责在运行时返回资源条目(无论它们存储在何处)。正如在前一节中所述,提供程序由 ResourceProviderFactory 实现创建,然后进行缓存以备今后之用。从图 4 所示的数据库资源提供程序模型中,您可以看出 DBResourceProvider 类型用于本地和全局资源皆可。此类型负责从数据库检索资源,但是它使用 DBResourceReader 和 StringResourcesDALC 组件来处理该任务。

资源提供程序实现了 IResourceProvider 接口,如代码清单 3 所示。

代码清单 3. IResourceProvider 接口

public interface IResourceProvider
{
 object GetObject(string resourceKey, CultureInfo culture);
 IResourceReader ResourceReader { get; }
}

各资源通过 GetObject() 进行检索,且 ResourceReader 属性应根据提供程序实例的资源类型返回资源的集合。

在页面解析步期间,提供程序用于检索页面的全部本地资源;显式表达式有效;还有,在编译期间,还会生成页面的代码。对于本地资源,资源读取器用于为隐式表达式生成代码。通过在适当的提供程序上对 GetObject() 进行调用,本地和全局资源的显式表达式分别有效。

在运行时,解析器生成的代码会触发对 GetObject() 的调用以在初始化页面时检索本地和全局资源。

检索单独的数据库资源

以下为针对 GetObject() 的 DBResourceProvider 实现。

public object GetObject(string resourceKey, CultureInfo culture)
{
 if (string.IsNullOrEmpty(resourceKey))
 {
throw new ArgumentNullException("resourceKey");
 } 
 
 if (culture == null)
 {
culture = CultureInfo.CurrentUICulture;
 }
 string resourceValue = m_dalc.GetResourceByCultureAndKey(culture, resourceKey);
}

实际上,可将检索资源的工作委派给 StringResourcesDALC 类型(请参见图 4)以处理数据库查询。此组件将提供程序与资源回退及其他需要查找实际资源的逻辑相隔离。

GetResourceByCultureAndKey() 初始化数据库连接并执行 SqlDataReader 以检索值,包括必需的资源回退逻辑(稍后再加以讨论)。

在批处理中检索资源

DBResourceProvider 在以下 ResourceReader 属性的实现中返回一个 DBResourceReader 实例。

public System.Resources.IResourceReader ResourceReader
{
 get
 {
ListDictionary resourceDictionary = this.m_dalc.GetResourcesByCulture(CultureInfo.InvariantCulture);
return new DBResourceReader(resourceDictionary);
 }
}

StringResourcesDALC 负责收集特定类型 (InvariantCulture) 的默认资源。为了实现枚举,由查询结果创建的 ListDictionary 被 DBResourceReader 所包装。

DBResourceReader 实现 IResourceReader。此实现的关键元素如下所示。

public class DBResourceReader : DisposableBaseType, IResourceReader, IEnumerable<KeyValuePair<string, object>>
{
 private ListDictionary m_resourceDictionary;
 public DBReso

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号