快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
urceReader(ListDictionary resourceDictionary)
 {
this.m_resourceDictionary = resourceDictionary;
 }
 public IDictionaryEnumerator GetEnumerator()
 {
return this.m_resourceDictionary.GetEnumerator();
 }
 // 其他方法
}

页面解析器使用读取器的字典枚举器为隐式表达式生成代码。如果未提供读取器或读取器中字典为空,则代码无法生成。隐式表达式不必为每一个属性值均显示值,因为它不是显式的。因此,对于隐式表达式,如果未生成代码来设置值,则默认属性值会随页面一同呈现。

资源回退

资源回退是资源提供程序实现的一个重要部分。资源根据请求线程的当前 UI 区域在运行时被请求。

System.Threading.Thread.Current.CurrentUICulture

如果该区域为一特定区域(如“es-EC”或“es-ES”),则资源提供程序应查看是否存在此特定区域的资源。不过,有可能仅指定了针对中立区域(如“es”)的资源。中立区域为父项。如果未发现任何特定条目,则接下来检查父项。最终应使用应用程序的默认区域,以便能找到值。在此示例中,默认区域为“en”。

资源回退由数据访问组件 StringResourcesDALC 来封装。在使用调用来检索资源时,GetResourceByCultureAndKey() 会被调用。此函数负责打开数据库连接,调用将执行资源回退的递归函数,随后关闭数据库连接。下面显示了 GetResourceByCultureAndKey() 的实现。

public string GetResourceByCultureAndKey(CultureInfo culture, string resourceKey)
{
 string resourceValue = string.Empty;
 try
 {
if (culture == null || culture.Name.Length == 0)
{
 culture = new CultureInfo(this.m_defaultResourceCulture);
}
this.m_connection.Open();
resourceValue = this.GetResourceByCultureAndKeyInternal
(culture, resourceKey);
 }
 finally
 {
this.m_connection.Close();
 }
 return resourceValue;
}

递归函数 GetResourceByCultureAndKeyInternal() 首先尝试查找特定区域的资源。如果没有找到,则搜索父项区域然后重试查询。如果仍未成功,则最后再尝试使用默认区域来查找资源条目。如果使用默认区域仍没有找到资源条目,则可能是示例中发生了严重异常。下面显示了 GetResourceByCultureAndKeyInternal() 的代码清单。

private string GetResourceByCultureAndKeyInternal
(CultureInfo culture, string resourceKey)
{
 StringCollection resources = new StringCollection();
 string resourceValue = null;
 this.m_cmdGetResourceByCultureAndKey.Parameters["cultureCode"].Value
= culture.Name;
 this.m_cmdGetResourceByCultureAndKey.Parameters["resourceKey"].Value
= resourceKey;
 using (SqlDataReader reader = this.m_cmdGetResourceByCultureAndKey.ExecuteReader())
 {
while (reader.Read())
{
 resources.Add(reader.GetString(reader.GetOrdinal("resourceValue")));
}
 }
 if (resources.Count == 0)
 {
if (culture.Name == this.m_defaultResourceCulture)
{
 throw new InvalidOperationException(String.Format(
Thread.CurrentThread.CurrentUICulture, Properties.Resources.RM_DefaultResourceNotFound, resourceKey));
}
culture = culture.Parent;
if (culture.Name.Length == 0)
{
 culture = new CultureInfo(this.m_defaultResourceCulture);
}
resourceValue = this.GetResourceByCultureAndKeyInternal(culture, resourceKey);
 }
 else if (resources.Count == 1)
 {
resourceValue = resources[0];
 }
 else
 {
thro

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