#c# #asp.net-core #razor-pages
#c# #asp.net-core #razor-страницы
Вопрос:
Я хочу добавить помощников тегов из плагинов.
Что-то вроде этого в _ViewImports.cshtml:
@addTagHelper *, *.MyApp.*
То есть возьмите все сборки, имя которых соответствует шаблону .MyApp. и добавьте помощники типов из этих сборок.
Я знаю, что @addTagHelper
не могу сделать это из коробки. Но есть ли здесь какая-либо точка расширения?
Я нашел этот пост о ITagHelperTypeResolver
, но похоже, что этот API не существует в ASP NET Core 2 .
Есть две причины, по которым я просто не могу использовать стандартный синтаксис:
- это приложение на основе плагинов (помощники тегов могут быть определены внутри плагинов);
- имена сборок создаются динамически. Весь мой проект импортирует некоторые общие настройки MSBuild, а для проекта с именем «MyApp.Foo» именем сборки будет «MyCompany.MyApp.Foo».
Комментарии:
1. Вам не нужно помещать
@addTagHelper *, *.MyApp.*
внутрь_ViewImports.cshtml
, это не закон или требование. Это просто удобство, потому что_ViewImports.cshtml
автоматически включается в каждое представление. Вы можете просто добавить@addTagHelper *, My.Plugin.Something
в представление, которое на самом деле его использует. Итак, если представление определено в вашем плагине, объявите его там. Так же, как вы объявляете пространства имен в любом файле cs 😉 При этом, не стесняйтесь добавлять_MyPluginImports.cshtml
и включать это в каждое из ваших представлений, тогда у вас будет только одно место для изменения / добавления этих помощников тегов: P2.
_ViewImports.cshtml
это просто обычный файл razor, как и любое представление. Ничего особенного3. @Tseng: есть две проблемы. Во-первых, помощники тегов и страницы находятся в разных сборках, а сборки pages не могут статически ссылаться на сборки помощников тегов — помощники тегов тоже являются плагинами. Во-вторых, я не знаю название сборки статически — MSBuild создает его во время компиляции.
4. @Dennis: Просто пытаюсь понять ваш вариант использования: тогда как вы предполагаете использовать теги на странице, когда вы не ссылаетесь на нее? Я имею в виду, когда ваши страницы находятся внутри сборки (читается: предварительно скомпилированы), вам уже нужно знать ссылку на помощник тегов, который вы хотите использовать, и вы можете просто добавить его (либо вручную, либо с помощью генераторов кода). Или нет? Я имею в виду, что пользователи ваших приложений в любом случае не смогут добавлять новые теги на ваши страницы razor после их отправки. Таким образом, единственным вариантом использования будут некомпилированные страницы / представления, но тогда пользователь может добавить ссылку самостоятельно, если он добавит новый тег в исходный код?
5. Есть проблема с GitHub с некоторыми подсказками к решению 2.0 , которое могло бы помочь.