在ApsNetCore RC2网络应用程序中,我在注入IHttpContextAccessor时出现问题
我有一个实现IHttpContextAccessor的类HttpContextService,在stratup.cs中我添加了它services.AddTransient<IHttpContextAccessor, HttpContextService>();
当我运行项目时它停止而没有显示错误,所以我查看了日志并发现了这个: 的&#39; dotnet.exe&#39; (CoreCLR:clrhost):已加载&#39; C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App \ 1.0.0-rc2-3002702 \ System.Net.Primitives.dll&#39;。无法找到或打开PDB文件。 抛出异常:&#39; System.IO.FileNotFoundException&#39;在mscorlib.ni.dll中 抛出异常:&#39; System.IO.FileNotFoundException&#39;在mscorlib.ni.dll中 抛出异常:&#39; System.InvalidOperationException&#39;在Microsoft.Extensions.DependencyInjection.dll
中是否有人有相同的问题或解决方案来修复它?
编辑: 我尝试以两种方式激活服务:
//this one throws and error Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' while attempting to activate 'EPTV.Services.HttpContextService'.
services.AddTransient<HttpContextService>();
//and with this one the project dont even start like I explained before
services.AddTransient<IHttpContextAccessor, HttpContextService>();
服务如下:
public class HttpContextService : IHttpContextAccessor
{
private readonly IHttpContextAccessor _accessor;
public HttpContext HttpContext
{
get { return HttpContext; }
set { HttpContext = value; }
}
public HttpContextService(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
public HttpContext GetHttpContext()
{
return _accessor.HttpContext;
}
public string GetHeader(string value)
{
return _accessor.HttpContext.Request.Headers[value];
}
public string GetUserAgent()
{
return _accessor.HttpContext.Request.Headers["User-Agent"];
}
public string GetHost()
{
return _accessor.HttpContext.Request.Host.Value;
}
}
这是我得到的例外:
抛出异常:&#39; System.InvalidOperationException&#39;在Microsoft.Extensions.DependencyInjection.dll中 附加信息:检测到类型为&#39; Microsoft.AspNetCore.Http.IHttpContextAccessor&#39;的服务的循环依赖关系。
答案 0 :(得分:0)
您需要添加&#34; System.Net.Primitives&#34;在project.json的依赖项中。
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-rc2-3002702"
},
"System.Net.Primitives": "4.0.11-rc2-24027"
}
答案 1 :(得分:0)
不支持修改ASP.NET Core服务,请参阅this Github issue进行讨论。
描述了您的问题的“hacky”解决方案答案 2 :(得分:0)
我终于找到了解决方案。
似乎在AspNetCore rc2中你必须在startup.cs中注册IHttpContextAccessor services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
然后你就可以在控制器或其他服务中注入IHttpContextAccessor