是否可以用动态对象替换静态方法?

时间:2014-08-14 09:39:09

标签: c# dynamic localization

我想解决的问题是,我必须重建我的应用程序以防语言文件更新。

我有一个现有的类,它是从ResX文件自动生成的。自动生成的部分如下所示:

/// <summary>
///   Looks up a localized string similar to OK.
/// </summary>
public static string MenuOk {
    get {
        return ResourceManager.GetString("MenuOk", resourceCulture);
    }
}

在我的代码中,我有很多这样的调用:

var text = Strings.MenuOk;

从ResourceManager获取密钥。我想改用字典来获取我的字符串而不是ResourceManager。该词典在程序开始时填写。

提前感谢您的意见。

3 个答案:

答案 0 :(得分:1)

因为你必须要访问这样的词典

var text = myDictionary["MenuOk"];

无论如何,为什么不包裹ResourceManager所以你不必每次都提供resourceCulture

public static string GetString(string key)
{
    return ResourceManager.GetString(key, ResourceCulture);
}

// ...

var text = MyResourceManager.GetString("MenuOk");

答案 1 :(得分:1)

好吧,您可以随时创建自己的基于XML的语言文件,并在代码中使用它们。

这样你就可以编译二进制文件并只更改额外的语言文件,但这样你就必须跟踪几个文件,而不仅仅是二进制文件。

答案 2 :(得分:0)

您可以使用MEF在运行时动态加载dll和类。如果你从未使用它,它可能会有点超过顶部。

否则你可以使用一些反射,但我怀疑这是你想要的方向。

我认为你的做法没有任何问题。 Mabye你可以让他们实现一个接口,否则只需交换实现的实例。