Подтвердить что ты не робот

Инъекция IUrlHelper в ядро ASP.NET

В RC1, IUrlHelper может быть введен в сервисах (с services.AddMvc() в классе запуска)

Это больше не работает в RC2. Кто-нибудь знает, как это сделать в RC2, поскольку для новшества UrlHelper требуется объект ActionContext. Не знаю, как получить это вне контроллера.

4b9b3361

Ответ 1

Для ASP.NET Core RC2 существует проблема для этого в репозитории github. Вместо ввода IUrlHelper возьмите IUrlHelperFactory. Это также похоже на то, что вам понадобится IActionContextAccessor, введенный как Controller, не имеющий общедоступного свойства ActionContext.

Зарегистрируйте зависимость:

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

Тогда от него зависит:

public SomeService(IUrlHelperFactory urlHelperFactory,
                   IActionContextAccessor actionContextAccessor)
{

    var urlHelper =
        urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
}

Затем используйте его, как вы сочтете нужным.

Ответ 2

Для Net Core 2.0

Добавьте это после service.AddMvc()

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(factory =>
{
    var actionContext = factory.GetService<IActionContextAccessor>()
                                   .ActionContext;
    return new UrlHelper(actionContext);
});

Ответ 3

ASP.NET Core 2.0

Установить

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

Использование

public void ConfigureServices(IServiceCollection services)
{
   ... 
   services.AddUrlHelper();
   ... 
}

Отказ от ответственности: автор этого пакета

Ответ 4

Для .Net Core 2.0

services.AddMvc();

services.AddScoped<IUrlHelper>(x =>
{
   var actionContext = x.GetRequiredService<IActionContextAccessor>().ActionContext;
   var factory = x.GetRequiredService<IUrlHelperFactory>();
   return factory.GetUrlHelper(actionContext);
});

Ответ 5

Для ASP.Net Core 2.0 вы не должны вводить IUrlHelper. Доступно как свойство контроллера. ControllerBase.Url является экземпляром IUrlHelper.