tag route net data asp all c# asp.net-core asp.net-core-mvc asp.net-core-1.0

c# - route - forms asp net core



Inyección de IUrlHelper en ASP.NET Core (4)

Para .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); });

En RC1 , IUrlHelper podría inyectarse en servicios (con services.AddMvc() en clase de inicio)

Esto ya no funciona en RC2 . ¿Alguien sabe cómo hacerlo en RC2, ya que simplemente renovar un UrlHelper requiere un objeto ActionContext ? No sé cómo sacar eso de un controlador.


Para ASP.NET Core RC2 hay un problema para esto en el repositorio de github . En lugar de inyectar el IUrlHelper , tome un IUrlHelperFactory . También suena como si necesitaras el IActionContextAccessor inyectado como un Controller ya no tiene una propiedad pública ActionContext .

Registrar la dependencia:

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

Entonces depende de ello:

public SomeService(IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionContextAccessor) { var urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext); }

Entonces úsalo como mejor te parezca.


Para Net Core 2.0

Agrega esto después de service.AddMvc()

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


ASP.NET Core 2.0

Instalar

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

Utilizar

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

Descargo de responsabilidad: autor de este paquete