.Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件。它是个好东西,很容易上手,工作效率高,性能稳定。使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是最快的。但是它也有个最大的缺点,就是修改资源文件后,项目必须重新编译,否则修改的资源不能被识别。这对于维护期的工作来讲,非常麻烦。尤其是已经上线的项目,即使是修改一个title的显示,也需要停掉项目。由于本人做了好几年的维护,应该是从工作到现在,一直没有间断过的做维护项目,因此深受其害!必须找到一个方案,规避掉这个令人头疼的问题。

  好了,铺垫的够多了,进入正题:使用自定义XML文件作为资源,完成本地化、国际化(该篇参考Artech如何让ASP.NET默认的资源编程方式支持非.ResX资源存储)。

  首先,我们需要一个资源访问接口,IResourceManager。它提供一组返回资源内容的方法签名:

     /// <summary>
/// 资源访问接口
/// </summary>
public interface IResourceManager
{
/// <summary>
/// 从资源文件中获取资源
/// </summary>
/// <param name="name">资源名称</param>
/// <returns></returns>
string GetString(string name); /// <summary>
/// 从资源文件中获取资源
/// </summary>
/// <param name="name">资源名称</param>
/// <param name="culture">区域语言设置</param>
/// <returns></returns>
string GetString(string name, CultureInfo culture);

  接下来实现这个接口(注意,我们还需要实现System.Resources.ResourceManager,因为这个类提供了“回溯”访问资源的功能,这对我们是非常有用的)

     public class XmlResourceManager : System.Resources.ResourceManager, IResourceManager
{
#region Constants private const string _CACHE_KEY = "_RESOURCES_CACHE_KEY_{0}_{1}";
private const string extension = ".xml"; #endregion #region Variables private string baseName; #endregion #region Properties /// <summary>
/// 资源文件路径
/// </summary>
public string Directory { get; private set; } /// <summary>
/// 资源文件基类名(不包含国家区域码)。
/// 覆盖基类的实现
/// </summary>
public override string BaseName
{
get { return baseName; }
} /// <summary>
/// 资源节点名称
/// </summary>
public string NodeName { get; private set; } #endregion #region Constructor [Microsoft.Practices.Unity.InjectionConstructor]
public XmlResourceManager(string directory, string baseName, string nodeName)
{
this.Directory = System.Web.HttpRuntime.AppDomainAppPath + directory;
this.baseName = baseName;
this.NodeName = nodeName; base.IgnoreCase = true; //资源获取时忽略大小写
} #endregion #region Functions /// <summary>
/// 获取资源文件名
/// </summary>
/// <param name="culture">国家区域码</param>
/// <returns></returns>
protected override string GetResourceFileName(CultureInfo culture)
{
string fileName = string.Format("{0}.{1}.{2}", this.baseName, culture, extension.TrimStart('.'));
string path = Path.Combine(this.Directory, fileName);
if (File.Exists(path))
{
return path;
}
return Path.Combine(this.Directory, string.Format("{0}.{1}", baseName, extension.TrimStart('.')));
} /// <summary>
/// 获取特定语言环境下的资源集合
/// 该方法使用了服务端高速缓存,以避免频繁的IO访问。
/// </summary>
/// <param name="culture">国家区域码</param>
/// <param name="createIfNotExists">是否主动创建</param>
/// <param name="tryParents">是否返回父级资源</param>
/// <returns></returns>
protected override ResourceSet InternalGetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents)
{
string cacheKey = string.Format(_CACHE_KEY, BaseName, culture.LCID); //缓存键值
XmlResourceSet resourceSet = CacheHelper.GetCache(cacheKey) as XmlResourceSet; //从缓存中获取当前资源
if (resourceSet == null)
{
string fileName = this.GetResourceFileName(culture);
resourceSet = new XmlResourceSet(fileName, NodeName, "key", "value");
CacheHelper.SetCache(cacheKey, resourceSet, new System.Web.Caching.CacheDependency(fileName)); //将资源加入缓存中
}
return resourceSet;
} #endregion
}

  在这个资源访问的实现中,我使用了服务端高速缓存。原因是我们想要使得修改的资源能够直接被识别,就必须在访问资源的时候,去文件中查找。这样的话每个资源的访问都需要一次IO消耗。这样性能损失太大,真的就得不偿失了。因此使用依赖于资源文件的高速缓存,已确保只有在资源文件发生变化时,才进行IO读取。(其实,也可以考虑在运行期间,创建单例的资源访问器,让资源访问权的枚举器枚举时,检测一个缓存变量(该变量依赖于资源文件),当资源文件发生变化时,枚举器重新读取资源,已实现如上同样的效果。这个我们以后有空再一起探讨。)该实现中,我也加入了Unity的构造注入方式,让我们的资源文件可配置。

  另外,InternalGetResourceSet方法还存在一些问题,就是可能会重复缓存同一个资源文件。例如,我们的资源文件有Resource.en-US.xml, 和Resource.xml,这时会生成三个缓存,将Resource.xml文件缓存了两次。这都是“回溯”惹的祸。在我的第一个版本源码公布时,我会修复这个问题。

  接下来,我们要实现资源的Set、Reader和Writer,用于资源文件的读写。

  XmlResourceReader:

     public class XmlResourceReader : IResourceReader
{
#region Properties public string FileName { get; private set; } public string NodeName { get; private set; } public string KeyAttr { get; private set; } public string ValueAttr { get; private set; } #endregion #region Constructors public XmlResourceReader(string fileName, string nodeName, string keyAttr, string valueAttr)
{
NodeName = nodeName;
FileName = fileName;
KeyAttr = keyAttr;
ValueAttr = valueAttr;
} #endregion #region Enumerator public IDictionaryEnumerator GetEnumerator()
{
Dictionary<string, string> set = new Dictionary<string, string>(); XmlDocument doc = new XmlDocument();
doc.Load(FileName); //将资源以键值对的方式存储到字典中。
foreach (XmlNode item in doc.GetElementsByTagName(NodeName))
{
set.Add(item.Attributes[KeyAttr].Value, item.Attributes[ValueAttr].Value);
} return set.GetEnumerator();
} /// <summary>
/// 枚举器
/// </summary>
/// <returns></returns>
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
} #endregion public void Dispose() { } public void Close() { }
}

  XmlResourceWriter:

     public interface IXmlResourceWriter : IResourceWriter
{
void AddResource(string nodeName, IDictionary<string, string> attributes);
void AddResource(XmlResourceItem resource);
} public class XmlResourceWriter : IXmlResourceWriter
{
public XmlDocument Document { get; private set; }
private string fileName;
private XmlElement root; public XmlResourceWriter(string fileName)
{
this.fileName = fileName;
this.Document = new XmlDocument();
this.Document.AppendChild(this.Document.CreateXmlDeclaration("1.0", "utf-8", null));
this.root = this.Document.CreateElement("resources");
this.Document.AppendChild(this.root);
} public XmlResourceWriter(string fileName, string root)
{
this.fileName = fileName;
this.Document = new XmlDocument();
this.Document.AppendChild(this.Document.CreateXmlDeclaration("1.0", "utf-8", null));
this.root = this.Document.CreateElement(root);
this.Document.AppendChild(this.root);
} public void AddResource(string nodeName, IDictionary<string, string> attributes)
{
var node = this.Document.CreateElement(nodeName);
attributes.AsParallel().ForAll(p => node.SetAttribute(p.Key, p.Value));
this.root.AppendChild(node);
} public void AddResource(XmlResourceItem resource)
{
AddResource(resource.NodeName, resource.Attributes);
} public void AddResource(string name, byte[] value)
{
throw new NotImplementedException();
} public void AddResource(string name, object value)
{
throw new NotImplementedException();
} public void AddResource(string name, string value)
{
throw new NotImplementedException();
} public void Generate()
{
using (XmlWriter writer = new XmlTextWriter(this.fileName, Encoding.UTF8))
{
this.Document.Save(writer);
}
}
public void Dispose() { }
public void Close() { }
}

  XmlResourceSet:

     public class XmlResourceSet : ResourceSet
{
public XmlResourceSet(string fileName, string nodeName, string keyAttr, string valueAttr)
{
this.Reader = new XmlResourceReader(fileName, nodeName, keyAttr, valueAttr);
this.Table = new Hashtable();
this.ReadResources();
} public override Type GetDefaultReader()
{
return typeof(XmlResourceReader);
}
public override Type GetDefaultWriter()
{
return typeof(XmlResourceWriter);
}
}

  在此,我有个疑问,希望有人能回答:为什么我每次通过Writer修改资源文件后,自问文件中没有换行,都是一行到底呢?

  OK,我们的XML访问模块的所有成员都到齐了。另外,我在自己的WebApp中增加了全局资源访问类型Resource:

     public class Resource
{
public static string GetDisplay(string key, string culture = "")
{
var display = ((AppUnityDependencyResolver)System.Web.Mvc.DependencyResolver.Current).GetService(typeof(IResourceManager), "Display") as IResourceManager;
if (string.IsNullOrWhiteSpace(culture))
return display.GetString(key);
else
return display.GetString(key, new System.Globalization.CultureInfo(culture));
} public static string GetMessage(string key, string culture = "")
{
var display = ((AppUnityDependencyResolver)System.Web.Mvc.DependencyResolver.Current).GetService(typeof(IResourceManager), "Message") as IResourceManager;
return display.GetString(key);
} public static string GetTitle()
{
var routes = HttpContext.Current.Request.RequestContext.RouteData.Values;
var key = string.Format("{0}.{1}.title", routes["controller"], routes["action"]);
return GetDisplay(key);
}
}

  注意到我的Resource类有三个静态方法,GetDisplay、GetMessage和GetTitle。由于我的源码中,字段名称和提示信息是在不同的资源文件中的,因此我写了两个静态方法,第一个是获取字段名称的,第二个是获取用户自定义提示信息的。而第三个是获取页面标题的,它依赖于当前执行的Action。

  现在,看看资源文件:

  ResourceDisplay.en-US.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<resource key="home.index.title" value="Home Page" />
<resource key="usermanage.index.title" value="User Management"/>
<resource key="setting.index.title" value="Settings"/> <resource key="UserProfile.UserName" value="English User Name"/>
<resource key="UserProfile.UserCode" value="English User Code"/>
</resources>

  ResourceDisplay.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<resource key="home.index.title" value="Home Page" />
<resource key="usermanage.index.title" value="User Management"/>
<resource key="setting.index.title" value="Settings"/> <resource key="UserProfile.UserName" value="Basic User Name"/>
<resource key="UserProfile.UserCode" value="Basic User Code"/>
<resource key="UserProfile.Email" value="Basic User Email Address"/>
</resources>

  接下来是在WebApp中使用资源文件了。

  在AccountController中添加EditUser方法:

        [HttpGet]
public ActionResult EditUser(int? id)
{
if (id.HasValue == false)
{
return View(new UserProfile());
}
else
{
var model = UserService.GetSingle<UserProfile>(id);
return View(model);
}
}

  对应的视图文件内容:

 @model Framework.DomainModels.UserProfile

 @{
ViewBag.Title = "EditUser";
} <h2>EditUser</h2>
@using (Html.BeginForm())
{
<p>@Resource.GetDisplay("UserProfile.UserName")</p>
<p>@Html.TextBoxFor(p=> p.UserName)</p>
<p>@Resource.GetDisplay("UserProfile.UserCode")</p>
<p>@Html.TextBoxFor(p=> p.UserCode)</p>
<p>@Resource.GetDisplay("UserProfile.Email")</p>
<p>@Html.TextBoxFor(p=> p.Email)</p>
}

  运行项目,输入http://localhost:****/Account/EditUser

  aaarticlea/png;base64,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" alt="" width="516" height="406" />

  看看前两个字段显示的内容是在ResourceDisplay.en-US.xml中定义的,而第三个字段是在ResourceDisplay.xml中定义的(这就是所谓的“回溯”)。

  这样就完了吗?当然没有,高潮来了......

  不要停止debug,打开资源文件ResourceDisplay.en-US.xml,删除我们对UserProfile.UserCode的定义,刷新页面看看(在此我就不截图了)。接下来,随便改改ResourceDisplay.en-US.xml中UserName的定义,刷新页面再瞧瞧,是否立刻应用?

  这样,我们前面预想的不进行编译,直接应用资源文件的修改就实现了。

  对了,还有一个GetTitle(),我们打开_Layout.cshtml,做如下修改:

 <title>@Resource.GetTitle() - My ASP.NET MVC Application</title>

  再次在资源文件中添加一行

 <resource key="Account.EditUser.title" value="User Edit"/>

  仍然刷新页面,注意上图中红线位置,是不是对应的Title信息已经显示?

  剧透:下一篇,我们会借助Metadata实现字段资源的自动显示,也就是说,我们不需要类似<p>@Resource.GetDisplay("UserProfile.UserName")</p>这样的显示调用,而改用<p>@Html.LabelFor(p=>p.UserName)</p>去显示字段的资源。

  

.NET MVC4 实训记录之五(访问自定义资源文件)的更多相关文章

  1. .NET MVC4 实训记录之七(实现资源的自主访问后续)

    我们在上一篇中讨论了如何利用ModelMetadata实现国际化资源文件访问,但也留下了一些问题,即:如何利用ModelMetadata实现相同类型的属性信息的个性化资源显示.本人没有找到合适的方案, ...

  2. .NET MVC4 实训记录之六(利用ModelMetadata实现资源的自主访问)

    上一篇我们已经实现自定义资源文件的访问,该篇我们使用它配合ModelMetadata实现资源文件的自主访问.这样做是为了我们能更简单的用MVC原生的方式使用资源文件.由于我的文章旨在记录MVC项目的实 ...

  3. .NET MVC4 实训记录之四(Unit of work + Repository)

    今日后开启进阶模式! 谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository). 仓储(Repository):领域对象集合.用于操作 ...

  4. .NET MVC4 实训记录之一(引入Unity3.0 Ioc框架)

    一直在做维护项目,没有机会接触完整的架构,于是自学.NET MVC.自今日起,将自学的过程.遇到的问题以及解决方案记录下来. 在WebApp项目中右键,使用NuGet引入Unity3.0.

  5. .NET MVC4 实训记录之三(EntityFramework 与枚举)

    EntityFramework对枚举的引入是从版本5开始的(如果没有记错的话).枚举可以很大程度上提高对程序的可读性.那么在EntityFramework的CodeFirst模式下,如何使用枚举呢?答 ...

  6. .NET MVC4 实训记录之二(扩展WebSecurity模型下的UserProfile表)

    使用VS2013创建MVC4项目后,自动生成的代码中默认使用WebSecurity模型创建用户管理,生成以下数据库:

  7. 记录-springMVC访问web-inf下文件问题+在jsp页面导入jquery插件路径不对问题

    环境:spring + springMvc + mybatis + maven 关于在springMVC环境访问web-inf目录下文件,其一有在springMVC xml文件下加 <!-- 对 ...

  8. spring访问静态资源文件

    用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件.当你在浏览器上直接输入某个css文 ...

  9. 【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?

    问题描述 当创建一个App Service 后,运行时环境和版本选择Windows 和 Python 3.6. 登录Kudu 站点查看,默认的文件有 web.config, hostingstart- ...

随机推荐

  1. wamp You don't have permission to access / on this server等问题的解决.

    原文:wamp You don't have permission to access / on this server等问题的解决. 安装完wamp之后,安装网上的教程设置虚拟路径,出现了问题,同样 ...

  2. python 基础知识点整理 和详细应用

    Python教程 Python是一种简单易学,功能强大的编程语言.它包含了高效的高级数据结构和简单而有效的方法,面向对象编程.Python优雅的语法,动态类型,以及它天然的解释能力,使其成为理想的语言 ...

  3. linux中fork()函数具体解释(原创!!实例解说)

     一.fork入门知识 一个进程,包含代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程差点儿全然同样的进程,也就是两个进程能够做全然同样的事,但假设初始參数或者传入的变量不 ...

  4. 数字使用相应的加密策略传递一个字符串后Java实现代码

    公司采用公用电话传递数据,数据小于8整数位,为了确保安全,     在转移的过程中需要加密,加密规则如下面的:         第一个数据下降,附图然后各加5,和除以10的余数取代该数字,       ...

  5. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  6. 【Python】Python的urllib模、urllib2模块的网络下载文件

    因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

  7. Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization

    跑 service network restart  NIC出现无法启动,他说,没有发现 Bringing up interface eth0: Device eth0 does not seem t ...

  8. Use PRODUCT_USER_PROFILE To Limit User

    The PRODUCT_USER_PROFILE (PUP) table provides product-level security that supplements the user-level ...

  9. hdu 4831 Scenic Popularity(模拟)

    pid=4831" style="font-weight:normal">题目链接:hdu 4831 Scenic Popularity 题目大意:略. 解题思路: ...

  10. UVA 11426 - GCD - Extreme (II) (数论)

    UVA 11426 - GCD - Extreme (II) 题目链接 题意:给定N.求∑i<=ni=1∑j<nj=1gcd(i,j)的值. 思路:lrj白书上的例题,设f(n) = gc ...