Comencé a convertir mi proyecto asp.net core RC1 a RC2 y enfrenté un problema que ahora IHttpContextAccessor
no se resuelve.
En aras de la simplicidad, creé un nuevo proyecto ASP.NET RC2 usando Visual Studio Template ASP.NET Core Web Application (.Net Framework)
. Luego agregué el constructor de HomeController que plantilla creó para mí.
public HomeController(IHttpContextAccessor accessor)
{
}
Y después de iniciar la aplicación, recibo el siguiente error:
InvalidOperationException: no se puede resolver el servicio para el tipo 'Microsoft.AspNetCore.Http.IHttpContextAccessor' al intentar activar 'TestNewCore.Controllers.HomeController'. Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
En mi aplicación real en Necesito resolver IHttpContextAccessor
en mi propia clase de servicio para obtener acceso a _contextAccessor.HttpContext.Authentication
y a _contextAccessor.HttpContext.User
. Everething funciona bien en RC1. Entonces, ¿cómo puede suponer estar en RC2?
Respuestas:
IHttpContextAccessor ya no está conectado de forma predeterminada, debe registrarlo usted mismo
fuente
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
Singleton
,Scoped
oTransient
?Singleton
. github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
. Alguna idea ?services.AddHttpContextAccessor()
que Microsoft prefiere / recomienda.A partir de .NET Core 2.1 hay un método de extensión que se ha agregado para registrar correctamente un
IHttpContextAccessor
como un singleton. Consulte Agregar ayuda para registrar IHttpContextAccessor # 947 . Simplemente agregue lo siguiente en suConfigureServices()
método:Esto es equivalente a:
fuente