Comecei a converter meu projeto RC1 do núcleo do asp.net em RC2 e enfrentei um problema que agora IHttpContextAccessor
não foi resolvido.
Por uma questão de simplicidade, criei o novo projeto ASP.NET RC2 usando o Visual Studio Template ASP.NET Core Web Application (.Net Framework)
. Então, eu adicionei o construtor para o HomeController, que modelo criou para mim.
public HomeController(IHttpContextAccessor accessor)
{
}
E depois de iniciar o aplicativo, recebo o próximo erro:
InvalidOperationException: Não foi possível resolver o serviço para o tipo 'Microsoft.AspNetCore.Http.IHttpContextAccessor' enquanto tentava ativar 'TestNewCore.Controllers.HomeController'. Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Tipo de tipo, Tipo requiredBy, Boolean isDefaultParameterRequired)
Na minha aplicação real Preciso resolver IHttpContextAccessor
em minha própria classe de serviço para obter acesso a _contextAccessor.HttpContext.Authentication
e _contextAccessor.HttpContext.User
. Tudo funciona bem no RC1. Então, como ele pode estar no RC2?
Respostas:
IHttpContextAccessor não está mais conectado por padrão, você deve registrá-lo
fonte
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
ouTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Qualquer ideia ?services.AddHttpContextAccessor()
preferido / recomendado pela Microsoft.A partir do .NET Core 2.1, há um método de extensão que foi adicionado para registrar corretamente um
IHttpContextAccessor
como um singleton. Consulte Adicionar auxiliar para registrar o IHttpContextAccessor # 947 . Basta adicionar o seguinte no seuConfigureServices()
método:Isso é equivalente a:
fonte