Saltar al contenido

Inyección de dependencia de MVC 6 IUrlHelper

Ya no tienes que investigar más por todo internet ya que llegaste al lugar indicado, contamos con la respuesta que quieres encontrar pero sin liarte.

Solución:

UrlHelper requiere el contexto de acción actual, y podemos adquirirlo desde ActionContextAccessor. estoy usando esto:

        services.AddScoped();
        services.AddScoped(x =>
        
            var  actionContext = x.GetService().ActionContext;
            return new UrlHelper(actionContext);
        );

Ahora, puede inyectar IUrlHelper directamente en cualquier cosa que lo necesite sin tener que pasar por IHttpContextAccessor .

Este método ahora está obsoleto. Mira la actualización a continuación.

En vez de services.AddTransient() o tratando de inyectar directamente IUrlHelper, puede inyectar IHttpContextAccessor y obtener el servicio desde allí.

public ClassConstructor(IHttpContextAccessor contextAccessor)

    this.urlHelper = contextAccessor.HttpContext.RequestServices.GetRequiredService();

A menos que sea solo un error, agregar el servicio IUrlHelper con UrlHelper no funciona.

ACTUALIZACIÓN 2017-08-28

El método anterior ya no parece funcionar. A continuación se muestra una nueva solución.

Configure IActionContextAccessor como un servicio:

public void ConfigureServices(IServiceCollection services)

    services
        .AddSingleton()
        .AddMvc();

Luego inyecte IActionContextAccessor y IUrlHelperFactory para luego generar el IUrlHelper como se muestra a continuación

public class MainController : Controller

    private IUrlHelperFactory urlHelperFactory  get; 
    private IActionContextAccessor accessor  get; 
    public MainController(IUrlHelperFactory urlHelper, IActionContextAccessor accessor)
    
        this.urlHelperFactory = urlHelper;
        this.accessor = accessor;
    

    [HttpGet]
    public IActionResult Index()
    
        ActionContext context = this.accessor.ActionContext;
        IUrlHelper urlHelper = this.urlHelperFactory.GetUrlHelper(context);
        //Use urlHelper here
        return this.Ok();
    

ASP.NET Core 2.0

Instalar en pc

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

Usar

public void ConfigureServices(IServiceCollection services)

   ... 
   services.AddUrlHelper();
   ... 

Descargo de responsabilidad: autor de este paquete

Te mostramos las reseñas y valoraciones de los lectores

Te invitamos a patrocinar nuestro ensayo ejecutando un comentario o puntuándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *