it-swarm.com.de

InvalidOperationException: Dienst für Typ "Microsoft.AspNetCore.Http.IHttpContextAccessor" kann nicht aufgelöst werden

Ich habe angefangen, mein asp.net-Core-RC1-Projekt in RC2 umzuwandeln, und hatte das Problem, dass jetzt IHttpContextAccessor nicht behoben wird.

Der Einfachheit halber habe ich ein neues ASP.NET RC2-Projekt mit der Visual Studio-Vorlage ASP.NET Core Web Application (.Net Framework) erstellt. 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 Anwendung gestartet habe, erhalte ich die folgende Fehlermeldung:

InvalidOperationException: Der Dienst für den Typ "Microsoft.AspNetCore.Http.IHttpContextAccessor" konnte beim Versuch, "TestNewCore.Controllers.HomeController" zu aktivieren, nicht aufgelöst werden. Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Typ type, Typ requiredBy, Boolean isDefaultParameterRequired)

In meiner realen Anwendung muss ich IHttpContextAccessor in meiner eigenen Serviceklasse auflösen, um Zugriff auf _contextAccessor.HttpContext.Authentication Und _contextAccessor.HttpContext.User Zu erhalten. In RC1 funktioniert alles einwandfrei. Wie kann es also angenommen werden, in RC2 zu sein?

101
YuriyP

IHttpContextAccessor ist standardmäßig nicht mehr verkabelt, Sie müssen es selbst registrieren

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
164
Joe Audette

Ab .NET Core 2.1 gibt es eine Erweiterungsmethode, die hinzugefügt wurde, um ein IHttpContextAccessor als Singleton korrekt zu registrieren. Siehe Hilfsprogramm zum Registrieren von IHttpContextAccessor # 947 hinzufügen . Fügen Sie einfach in Ihrer ConfigureServices() -Methode Folgendes hinzu:

services.AddHttpContextAccessor();

Dies ist äquivalent zu:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
82
CalC