Ich habe begonnen, mein asp.net-Kern-RC1-Projekt in RC2 zu konvertieren, und hatte ein Problem, das jetzt IHttpContextAccessor
nicht gelöst werden kann.
Der Einfachheit halber habe ich ein neues ASP.NET RC2-Projekt mit Visual Studio Template erstellt ASP.NET Core Web Application (.Net Framework)
. Dann habe ich einen Konstruktor für HomeController hinzugefügt, dessen Vorlage für mich erstellt wurde.
public HomeController(IHttpContextAccessor accessor)
{
}
Und nachdem ich die Bewerbung gestartet habe, erhalte ich den nächsten Fehler:
InvalidOperationException: Dienst für Typ 'Microsoft.AspNetCore.Http.IHttpContextAccessor' kann nicht aufgelöst werden, während versucht wird, 'TestNewCore.Controllers.HomeController' zu aktivieren. • Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Typ type, Type requiredBy, Boolean isDefaultParameterRequired)
In meiner realen Anwendung muss ich mich IHttpContextAccessor
in meiner eigenen Serviceklasse auflösen , um Zugriff auf _contextAccessor.HttpContext.Authentication
und zu erhalten _contextAccessor.HttpContext.User
. In RC1 funktioniert alles einwandfrei. Wie kann es also annehmen, in RC2 zu sein?
Antworten:
IHttpContextAccessor ist standardmäßig nicht mehr verkabelt, Sie müssen es selbst registrieren
quelle
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
oderTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Irgendeine Idee ?services.AddHttpContextAccessor()
von Microsoft bevorzugten / empfohlenen Erweiterungsmethode finden Sie in der nächsten Antwort .Ab .NET Core 2.1 wurde eine Erweiterungsmethode hinzugefügt, um eine korrekt
IHttpContextAccessor
als Singleton zu registrieren . Siehe Helfer hinzufügen, um IHttpContextAccessor # 947 zu registrieren . Fügen Sie IhrerConfigureServices()
Methode einfach Folgendes hinzu :Dies entspricht:
quelle