为了开发国际化版本的软件,我们常常使用资源文件来定义一些对不同语言区域有不同名称的字段。一般情况下,我们可以直接使用Resources.XXX类似的方式获得资源文件的项。
但是,你会发现,当我把某个对象隐藏起来,也就是说使用非public类型的声明的对象,使用资源文件始终使用的是本装配件中指定的。如何做到既可以保持原有隐藏,又可以支持二次开发的时候,可以使用用户自定义资源文件替换掉原有基类中的资源文件呢?本人做了以下尝试。
首先创建了三个project,分别为Common.Services,HR.Businesses ,Console三个项目进行测试,Hr.Business中MyOrder派生自Common.Services.Order中。
其中ResetName方法会获得派生类的资源文件。
1
protected
virtual
string
ResetName()
{
2
Assembly assembly = this.GetType().Assembly;
3
string name = assembly.GetName().Name;
4
ResourceManager manager = new ResourceManager(string.Format("{0}.Properties.Resources", name), assembly);
5
return manager.GetString("Shirt");
6
}
通过创建新的
ResourceManager
实例,另外通过反射获得派生类的装配件。这样就完成了资源文件的获取工作。


2

3

4

5

6

有兴趣的朋友可以尝试一下,欢迎提出更好的办法,大家共同探讨。