在一个类库中,使用.resx文件来存储常见的字符串引用是否可行?

4

在业务层类库中使用.resx文件来存储常用的字符串引用是否可行?我通常只看到这些在表示层中使用。

4个回答

3

一种选择是在您的解决方案中拥有一个单独的项目,其中包含您整个解决方案的所有resx文件。然后,您可以将其作为业务层的引用添加到其中。在资源项目中,您可以编写一个围绕 .net ResourceManager 类的包装器,以返回您的键的资源值。类似于以下内容:

public class ResourceService : IResourceService
{
    public ResourceService() {}

    public GetResourceValue(string resourceFileName, string resourceKey)
    {
         var resourceManager = new ResourceManager("Myresources", Assembly.Load("MyResourcesProjectName"));
         return resourceManager.GetString(resourceKey);
    }
} 

然后您可以在业务层中使用它:

var resourceService = new ResourceService();
var resourceValue = resourceService.GetResourceValue("MyResources", "ResourceKeyName");

我没有时间测试我即兴编写的代码,但它应该给你一个大致的想法。在我的看法中,将resx文件放在单独的项目中没有任何问题。 另一种方法是将.resx文件放在使用它们的地方。我认为单独的项目思路更好,因为这样,您可以为每种语言类型创建单独的文件夹,并在其中存储特定于区域设置的.resx文件。


2

最好将用户可见的字符串移动到表示层,但有时需要在业务层构建一些消息。如果您计划将这些消息翻译成多种语言/文化,则适合将它们放在 resx 文件中。


2

我认为将用户界面字符串放入任何层的resx文件中都没有问题。

例如,如果您的业务逻辑有像CreateGreatingMail(User user,CultureInfo language)这样的内容,则需要将多个用户界面本地化字符串放在某个地方,而resx是最好的选择。

对于共享UI字符串,您可以拥有专门用于UI字符串的显式UI层程序集,而不是将其合并到共享业务层中。


0

是的,确切地说,.resx文件放置在表示层

但您可以设置常量

const string toto = "test";

那么,在业务层中,我们应该将常见的字符串引用存储在哪里?作为相关类的const成员?如果特定的业务原因需要使用许多字符串引用-我们如何防止它们分散在许多类中。将它们集中在一个位置(例如.resx文件)中是很好的选择。 - fin
1
@fin 你不能将它们作为普通常量集中在一个类中吗?ResX文件是用于本地化的,翻译非常依赖上下文——因此通常不应该将它们编译到共享库中。 - McGarnagle
函数常量不是为了视觉需求而设计的,因此您不需要将其保存在resx文件中。 - Aghilas Yakoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接