ASP.NET Core MVC - одно и то же имя представления в нескольких сборках времени выполнения - PullRequest
0 голосов
/ 01 октября 2019

У меня есть приложение с системой плагинов, где каждый плагин содержит , возможно, не уникальный основной класс, представления и файлы локализации, которые будут работать независимо

Структура

  • основное приложение
  • плагины /
  • плагины / section_code / item_id / plugin.dll (класс Test :: Plugin, / Views / Plugin / Index)
  • plugins / another_section_code / item_id / plugin.dll (класс Test :: Plugin, / Views / Plugin / Index)

Мои требования

  1. Плагин не привязан к своему идентификатору. Я могу продублировать dll и разместить его там, где я хочу
  2. Главное приложение имеет маршрут / плагин / {section} / {id} / {action}, с помощью которого оно вызывает некоторое действие соответствующего основного класса плагина
  3. Основной класс плагина не маршрутизируется как контроллер, но может возвращать соответствующие представления и поддерживает анализ IDE
  4. Представления плагина должен использовать макет из основного приложения и поддерживать переводы

Что я пробовал

  1. Проект API содержит базовый класс контроллера с атрибутом [NonController] и [NonAction] для каждого метода (анализ IDE - ОК)
  2. Внедрить все* .cshtml в один файл plugin.dll, добавьте «/ PLUGIN_PREFIX $ section_code $ item_id /» для просмотра пути путем обработки результата контроллера плагина и проанализируйте этот путь в пользовательском IFileProvider, который передан в RazorViewEngineOptions. IFileProvider использует базу данных плагинов, чтобы решить, какую сборку плагина использовать (Макет из основного приложения - ОК, Представления - ОК)
  3. Найти похожее решение для перевода файлов * .resx (возможно, написать собственный сервис локализации ...)

Вопрос

Все отлично работает, кроме переводов. Я могу независимо видеть одни и те же представления (например, /Views/Plugin/Index.cshtml) из нескольких сборок плагинов в зависимости от запроса

Как сделать так, чтобы он поддерживал переводы? Или есть более элегантное решение этой проблемы?

...