2016-05-19 43 views
18

In RC1, IUrlHelper potrebbe essere iniettato nel settore dei servizi (con services.AddMvc() in classe di startup)Iniezione di IUrlHelper in ASP.NET core 1.0 RC2

Questo non funziona più in RC2. Qualcuno sa come farlo in RC2 poiché la nuova creazione di un UrlHelper richiede un oggetto ActionContext. Non so come ottenerlo al di fuori di un controller.

risposta

30

Per ASP.NET Core RC2 c'è un issue for this on the github repo. Invece di iniettare il IUrlHelper, prendi un IUrlHelperFactory. Sembra anche che tu avresti bisogno del IActionContextAccessor iniettato come Controller non ha più una proprietà pubblica ActionContext.

registro delle dipendenze:

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); 

Poi dipende da esso:

public SomeService(IUrlHelperFactory urlHelperFactory, 
        IActionContextAccessor actionContextAccessor) 
{ 

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

quindi utilizzarlo come meglio credi.

0

ASP.NET core 2,0

Installare

PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper 

Usa

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

responsabilità: autore di questo pacchetto

+3

Diniego: Tu sei l'autore di questo pacchetto – caesay

1

Per netto core 2.0

Aggiungere questo dopo service.AddMvc()

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