是否建议使用 .resx 文件将常见的字符串引用存储在业务层类库中?我通常只看到这些在表示层中使用过。
4 回答
一种选择是在您的解决方案中拥有一个单独的项目,其中包含整个解决方案的所有 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");
我没有时间测试代码,我是在运行中编写的,但它应该给你一个大致的想法。IMO,将 resx 文件放在单独的项目中没有任何问题。另一种接近它的方法是在使用它们的地方有 .resx 文件。我发现单独的项目想法更好,因为这样,您可以为每种语言创建单独的文件夹,并在其中存储特定于语言环境的 .resx 文件。
最好尝试将用户将看到的字符串移动到表示层,但在业务层中构建一些消息的情况并不少见。如果您计划将消息翻译成多种语言/文化,那么将它们放在 resx 文件中是合适的。
我认为将面向用户的字符串放入任何层的 resx 文件中都没有问题。
即,如果您的业务逻辑有类似的东西CreateGreatingMail(User user, CultureInfo language)
,那么您将有多个面向用户的可本地化字符串,您需要将它们放在某个地方,而 resx 是最好的地方。
对于共享 UI 字符串,您可以拥有专门用于 UI 字符串的显式 UI 层组件,而不是将其合并到共享业务层中。
是的,Exaclty.resx file
放置在 上Presentation Layer
。
但是你可以设置constant
const string toto = "test";