У меня есть приложение с системой плагинов, где каждый плагин содержит , возможно, не уникальный основной класс, представления и файлы локализации, которые будут работать независимо
Структура
- основное приложение
- плагины /
- плагины / section_code / item_id / plugin.dll (класс Test :: Plugin, / Views / Plugin / Index)
- plugins / another_section_code / item_id / plugin.dll (класс Test :: Plugin, / Views / Plugin / Index)
Мои требования
- Плагин не привязан к своему идентификатору. Я могу продублировать dll и разместить его там, где я хочу
- Главное приложение имеет маршрут / плагин / {section} / {id} / {action}, с помощью которого оно вызывает некоторое действие соответствующего основного класса плагина
- Основной класс плагина не маршрутизируется как контроллер, но может возвращать соответствующие представления и поддерживает анализ IDE
- Представления плагина должен использовать макет из основного приложения и поддерживать переводы
Что я пробовал
- Проект API содержит базовый класс контроллера с атрибутом [NonController] и [NonAction] для каждого метода (анализ IDE - ОК)
- Внедрить все* .cshtml в один файл plugin.dll, добавьте «/ PLUGIN_PREFIX $ section_code $ item_id /» для просмотра пути путем обработки результата контроллера плагина и проанализируйте этот путь в пользовательском IFileProvider, который передан в RazorViewEngineOptions. IFileProvider использует базу данных плагинов, чтобы решить, какую сборку плагина использовать (Макет из основного приложения - ОК, Представления - ОК)
- Найти похожее решение для перевода файлов * .resx (возможно, написать собственный сервис локализации ...)
Вопрос
Все отлично работает, кроме переводов. Я могу независимо видеть одни и те же представления (например, /Views/Plugin/Index.cshtml) из нескольких сборок плагинов в зависимости от запроса
Как сделать так, чтобы он поддерживал переводы? Или есть более элегантное решение этой проблемы?