Я играл с ядром asp.net и пытался перенести на него своих помощников. Я ввел свой собственный помощник в представления, но мне нужно было получить доступ к IHtmlHelper по умолчанию (я не хочу расширять HtmlHelper).Пользовательский помощник бритвы с IHtmlHelper reference
Итак, я построил свой конструктор таким образом, чтобы получить конкретный IHtmlHelper от IoC.
public FWHtmlHelper(IHtmlHelper htmlHelper)
{
this._htmlHelper = htmlHelper;
}
Дело в том, когда я попытался получить доступ помощника, я получил эту ошибку:
InvalidOperationException: Must call 'Contextualize' method before using this HtmlHelper instance.
Итак, как я могу создать свой собственный помощник и доступ к вспомогательному экземпляру View HTML?
* Редактировать, в соответствии с просьбой:
добавлен в контейнер
services.AddTransient(typeof(IFWHtmlHelper<>), typeof(FWHtmlHelper<>));
впрыскивается его в поле зрения
@inject IFWHtmlHelper<TModel> FWHtml
Затем я создал расширение для моего помощника
public static TagBuilder Example<TModel, TValue>(this IFWHtmlHelper<TModel> fwHelper, Expression<Func<TModel, TValue>> expression)
{}
Как вы создаете/регистрируете этот класс? Не могли бы вы предоставить пример кода, который воспроизводит эту проблему? –
Ну, я добавляю свой интерфейс к IoC с помощью «services.AddTransient (typeof (IFWHtmlHelper <>), typeof (FWHtmlHelper <>)); и вводят его в представление @inject IFWHtmlHelper FWHtml. Затем я создал расширение для моего помощника с общедоступным статическим тегом TagBuilder (этот IFWHtmlHelper fwHelper, выражение <выражение FOM >) {} –
Как говорится в ошибке, 'IHtmlHelper' только делает смысл при использовании в контексте представления и, таким образом, вводит «ViewContext», предоставляемый путем вызова его метода «Contextualize». Почему бы не создать расширение непосредственно над 'IHtmlHelper' или создать помощник тега? –