我开始将我的 asp.net core RC1 项目转换为 RC2,但遇到了现在IHttpContextAccessor
无法解决的问题。
为简单起见,我使用 Visual Studio 模板 ASP.NET Core Web Application (.Net Framework)
创建了新的 ASP.NET RC2 项目。比我为 HomeController 添加了为我创建的模板的构造函数。
public HomeController(IHttpContextAccessor accessor)
{
}
在我启动应用程序后,我收到下一个错误:
InvalidOperationException:尝试激活“TestNewCore.Controllers.HomeController”时无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务。 в Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
在我的实际应用程序中,我需要在自己的服务类中解析 IHttpContextAccessor
才能访问 _contextAccessor.HttpContext.Authentication
和 _contextAccessor.HttpContext.User
。 Everthing 在 RC1 中运行良好。那么它怎么可能在 RC2 中呢?
IHttpContextAccessor 默认不再绑定,需要自己注册
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
从 .NET Core 2.1 开始,添加了一个扩展方法以将 IHttpContextAccessor
正确注册为单例。请参阅Add helper to register IHttpContextAccessor #947。只需在您的 ConfigureServices()
方法中添加以下内容:
services.AddHttpContextAccessor();
这相当于:
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddScoped(sp => sp.GetService<IHttpContextAccessor>().HttpContext.Session);
services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
也有同样的故事Singleton
、Scoped
还是Transient
?Singleton
。 github.com/aspnet/Hosting/issues/793InvalidOperationException: Cannot consume scoped service
。任何想法 ?services.AddHttpContextAccessor()
的下一个答案。