Как добавить помощников тегов из плагинов?

#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 и включать это в каждое из ваших представлений, тогда у вас будет только одно место для изменения / добавления этих помощников тегов: P

2. _ViewImports.cshtml это просто обычный файл razor, как и любое представление. Ничего особенного

3. @Tseng: есть две проблемы. Во-первых, помощники тегов и страницы находятся в разных сборках, а сборки pages не могут статически ссылаться на сборки помощников тегов — помощники тегов тоже являются плагинами. Во-вторых, я не знаю название сборки статически — MSBuild создает его во время компиляции.

4. @Dennis: Просто пытаюсь понять ваш вариант использования: тогда как вы предполагаете использовать теги на странице, когда вы не ссылаетесь на нее? Я имею в виду, когда ваши страницы находятся внутри сборки (читается: предварительно скомпилированы), вам уже нужно знать ссылку на помощник тегов, который вы хотите использовать, и вы можете просто добавить его (либо вручную, либо с помощью генераторов кода). Или нет? Я имею в виду, что пользователи ваших приложений в любом случае не смогут добавлять новые теги на ваши страницы razor после их отправки. Таким образом, единственным вариантом использования будут некомпилированные страницы / представления, но тогда пользователь может добавить ссылку самостоятельно, если он добавит новый тег в исходный код?

5. Есть проблема с GitHub с некоторыми подсказками к решению 2.0 , которое могло бы помочь.