it-swarm.com.de

Injektion von IUrlHelper in ASP.NET Core

In RC1 könnte IUrlHelper in Services eingefügt werden (mit services.AddMvc() in der Startklasse)

Das funktioniert nicht mehr in RC2 . Weiß jemand, wie es in RC2 gemacht wird, da ein Neupositionieren einer UrlHelper ein ActionContext Objekt erfordert. Ich weiß nicht, wie man das außerhalb eines Controllers bekommt.

21
RolandG

Für ASP.NET Core RC2 gibt es ein Problem auf dem Github-Repo . Anstatt die IUrlHelper zu injizieren, nehmen Sie eine IUrlHelperFactory. Es klingt auch so, als müssten Sie die IActionContextAccessor als Controller injiziert haben und keine öffentliche Eigenschaft ActionContext mehr haben.

Registrieren Sie die Abhängigkeit:

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

Dann hängt davon ab:

public SomeService(IUrlHelperFactory urlHelperFactory,
                   IActionContextAccessor actionContextAccessor)
{

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

Dann verwenden Sie es, wie Sie es für richtig halten.

33
David Pine

Für Net Core 2.0

Fügen Sie dies nach service.AddMvc() hinzu.

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

Installieren

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper

Benutzen

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

Disclaimer: Autor dieses Pakets

2
tchelidze

Für ASP.Net Core 2.0 dürfen Sie keinen IUrlHelper injizieren. Es ist als Eigenschaft des Controllers verfügbar. ControllerBase.Url ist eine IUrlHelper-Instanz.

1

Für .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