Желательно ли использовать файл.resx для хранения общих строковых ссылок в библиотеке классов?
Желательно ли использовать файл.resx для хранения общих строковых ссылок в библиотеке классов бизнес-уровня? Я обычно только когда-либо видел, чтобы они использовались на уровне представления.
4 ответа
Один из вариантов - иметь отдельный проект в вашем решении, в котором есть все файлы resx для всего вашего решения. Затем вы можете добавить его в качестве ссылки на свой бизнес-уровень. В Project Resources вы можете написать обертку вокруг класса.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, специфичные для локали.
Лучше всего попытаться переместить строки, которые пользователь увидит, на уровень представления, но нередко приходится создавать некоторые сообщения на бизнес-уровне. Если вы планируете переводить сообщения на несколько языков / культур, то целесообразно поместить их в файл resx.
Я не вижу проблем с помещением пользовательских строк в файл resx на любом слое.
Т.е. если у вас в бизнес логике есть что-то вроде CreateGreatingMail(User user, CultureInfo language)
чем у вас будет несколько локализованных строк, ориентированных на пользователя, которые вам нужно где-то поместить, и лучше всего будет использовать resx.
Для совместного использования строк пользовательского интерфейса вы можете иметь явную сборку уровня пользовательского интерфейса, предназначенную исключительно для строк пользовательского интерфейса, а не объединять ее с общим бизнес-уровнем.
Да точно .resx file
находится на Presentation Layer
,
Но вы можете установить constant
const string toto = "test";