Желательно ли использовать файл.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";
Другие вопросы по тегам