Zacząłem konwertować mój projekt rdzenia RC1 asp.net do RC2 i napotkałem problem, który teraz IHttpContextAccessor
nie został rozwiązany.
Dla uproszczenia utworzyłem nowy projekt ASP.NET RC2 przy użyciu Visual Studio Template ASP.NET Core Web Application (.Net Framework)
. Następnie dodałem konstruktora dla HomeController, który utworzył dla mnie szablon.
public HomeController(IHttpContextAccessor accessor)
{
}
A po uruchomieniu aplikacji pojawia się kolejny błąd:
InvalidOperationException: nie można rozpoznać usługi typu „Microsoft.AspNetCore.Http.IHttpContextAccessor” podczas próby aktywacji „TestNewCore.Controllers.HomeController”. в Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
W mojej prawdziwej aplikacji muszę rozwiązać IHttpContextAccessor
we własnej klasie usług dostęp do _contextAccessor.HttpContext.Authentication
i do _contextAccessor.HttpContext.User
. Wszystko działa dobrze w RC1. Jak więc może być w RC2?
Odpowiedzi:
IHttpContextAccessor nie jest już domyślnie podłączony, musisz go zarejestrować samodzielnie
źródło
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
czyTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Dowolny pomysł ?services.AddHttpContextAccessor()
która jest preferowana / zalecana przez firmę Microsoft.Od wersji .NET Core 2,1 istnieje metoda rozszerzenia, która została dodana w celu prawidłowego zarejestrowania
IHttpContextAccessor
jako singleton. Zobacz Dodawanie pomocnika, aby zarejestrować IHttpContextAccessor # 947 . Po prostu dodaj do swojejConfigureServices()
metody:Jest to równoważne z:
źródło