services net mvc iservicecollection injection dependency configureservices .net dependency-injection asp.net-core

.net - net - mvc dependency injection



InvalidOperationException: no se puede resolver el servicio para el tipo ''Microsoft.AspNetCore.Http.IHttpContextAccessor'' (2)

Comencé a convertir mi proyecto asp.net core RC1 a RC2 y enfrenté un problema que ahora IHttpContextAccessor no resuelve.

En aras de la simplicidad, creé un nuevo proyecto ASP.NET RC2 utilizando 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, 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?


A partir de .NET Core 2.1, se ha agregado un método de extensión para registrar correctamente un IHttpContextAccessor como singleton. Consulte Agregar ayuda para registrar IHttpContextAccessor # 947 . Simplemente agregue lo siguiente en su método ConfigureServices() :

services.AddHttpContextAccessor();

Esto es equivalente a:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();


IHttpContextAccessor ya no está conectado de forma predeterminada, debe registrarlo usted mismo

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();