Инъекция IUrlHelper в ASP.NET Core 1.0 RC2

19

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

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

    
задан RolandG 19.05.2016 в 13:38
источник

3 ответа

32

Для 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);
}

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

    
ответ дан David Pine 19.05.2016 в 13:49
4

Для Net Core 2.0

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

    services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
    services.AddScoped<IUrlHelper>(factory =>
    {
        var actionContext = factory.GetService<IActionContextAccessor>()
                                   .ActionContext;
        return new UrlHelper(actionContext);
    });
    
ответ дан frostymarvelous 02.03.2018 в 07:27
0

ASP.NET Core 2.0

Установить

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

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

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

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

    
ответ дан tchelidze 18.10.2017 в 09:28
  • Отказ от ответственности: вы являетесь автором этого пакета –  caesay 31.10.2017 в 01:24
  • Я пытаюсь получить доступ к IUrlHelper на концентраторе в aspnet signalr core 2.1 будет работать ваш пакет? –  Phathutshedzo Khabubu 24.05.2018 в 16:58
  • @PhathutshedzoKhabubu пакет просто регистрирует IUrlHelper в ServiceCollection с необходимыми зависимостями. Поскольку DI доступен, IUrlHelper также будет доступен. –  tchelidze 25.05.2018 в 08:29
  • Я установил этот пакет в asp, net core 2.0.6 и попытался ввести IUrlHelper в базовый концентратор singnalR, но он не был введен и получил значение null, так что я сделал это и заметил, что добавил services.AddUrlHelper ( ); после services.AddMvc () –  Phathutshedzo Khabubu 25.05.2018 в 14:08
  • @PhathutshedzoKhabubu Как вы получаете доступ к IUrlHelper? если вы вставляете его в конструктор, и он недоступен, вы получите исключение вместо null –  tchelidze 25.05.2018 в 14:22