Я хотел бы создать ViewHelper для локализации моего приложения ASP.NET MVC. Что-то вроде этого:ASP.NET MVC ViewHelpers и Injection Dependency
public class Translator
{
private readonly ITranslationRepository _repo;
public Translator(ITranslationRepository repo)
{
_repo = repo;
}
public static string Translate(TranslationEnum translationEnum)
{
return _repo.GetTranslation(translationEnum, Session.LanguageId);
}
}
Использование в (Razor) View выглядит следующим образом:
<p>@Translator.Translate(TranslationEnum.WelcomeMessage)</p>
Теперь проблема, конечно, я не могу сделать метод Translate
статичны, потому что мне нужно, чтобы получить доступ к переменная экземпляра _repo
.
Как я могу вставить репозиторий в ViewHelper, чтобы я мог использовать его в представлении, как показано выше?
Как что SRP нарушение? Переводчик несет в себе одну ответственность: он берет ключ и возвращает значение для этого ключа в соответствии с логикой внедренной реализации ITranslationRepository. Меня не волнует, что в конечном итоге реализация использует ASP.NET Globalization, базу данных или даже веб-сервис. – Sandro
, если он берет ключ и возвращает строку, почему вы проходите в репозитории? Хорошо, вам нужен репозиторий для извлечения ключа, но это не переводчик. – Larry
Не думайте о репозитории базы данных. «ITranslationRepository» - это просто интерфейс. Я мог бы также назвать его «ITranslationService» или «ITranslationHelper». Я абстрагирую логику получения от моего помощника, чтобы я мог изменить ее в любое время. – Sandro