web-dev-qa-db-fra.com

Injection de IUrlHelper dans ASP.NET Core

Dans RC1 , IUrlHelper pourrait être injecté dans les services (avec services.AddMvc() dans la classe de démarrage)

Cela ne fonctionne plus dans RC2 . Est-ce que quelqu'un sait comment le faire dans RC2 alors que la création d'une UrlHelper nécessite simplement un objet ActionContext Je ne sais pas comment obtenir ça en dehors d'un contrôleur.

21
RolandG

Pour ASP.NET Core RC2, il existe un problème dans le dépôt github . Au lieu d’injecter la IUrlHelper, prenez une IUrlHelperFactory. Il semble également que vous ayez besoin de la IActionContextAccessor injectée, car Controller n'a plus de propriété publique ActionContext.

Enregistrez la dépendance:

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

Alors dépendons de cela:

public SomeService(IUrlHelperFactory urlHelperFactory,
                   IActionContextAccessor actionContextAccessor)
{

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

Ensuite, utilisez-le comme bon vous semble.

33
David Pine

Pour Net Core 2.0

Ajoutez ceci après service.AddMvc()

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

ASP.NET Core 2.0

Installer

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

Utilisation

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

Disclaimer: auteur de ce paquet

2
tchelidze

Pour ASP.Net Core 2.0 vous ne devez pas injecter un IUrlHelper. Il est disponible en tant que propriété du contrôleur. ControllerBase.Url est une instance de IUrlHelper.

1
Oleksandr Dudnyk

Pour .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);
});
1
Dilhan Jayathilake