Инъекция IUrlHelper в ядро ASP.NET
В RC1, IUrlHelper
может быть введен в сервисах (с services.AddMvc()
в классе запуска)
Это больше не работает в RC2. Кто-нибудь знает, как это сделать в RC2, поскольку для новшества UrlHelper
требуется объект ActionContext
. Не знаю, как получить это вне контроллера.
Ответы
Ответ 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.