Comencé a convertir mi proyecto asp.net core RC1 a RC2 y enfrenté un problema que ahora IHttpContextAccessorno 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 IHttpContextAccessoren mi propia clase de servicio para obtener acceso a _contextAccessor.HttpContext.Authenticationy 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,ScopedoTransient?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
IHttpContextAccessorcomo un singleton. Consulte Agregar ayuda para registrar IHttpContextAccessor # 947 . Simplemente agregue lo siguiente en suConfigureServices()método:Esto es equivalente a:
fuente