已添加AddHttpContextAccessor仍无法解析HttpContextAccessor服务问题
解决HttpContextAccessor无法被解析的问题
- 确认注册顺序:
builder.Services.AddHttpContextAccessor()必须在builder.Build()之前调用,且要放在所有依赖它的服务注册前面。比如先注册这个服务,再注册你的业务服务,否则DI容器在注册业务服务时还未识别HttpContextAccessor。正确示例:
var builder = WebApplication.CreateBuilder(args); // 优先注册HttpContextAccessor builder.Services.AddHttpContextAccessor(); // 再注册依赖它的服务 builder.Services.AddScoped<IMyService, MyService>(); var app = builder.Build(); // ...后续中间件配置
不要搞错注入类型:DI容器注册的是
IHttpContextAccessor接口,而非具体的HttpContextAccessor类。你的服务构造函数里要注入接口,不能直接写具体类。
错误写法:public MyService(HttpContextAccessor accessor) { ... }正确写法:
public MyService(IHttpContextAccessor accessor) { ... }排查多容器实例问题:别自己新建独立的ServiceCollection注册服务,必须使用
builder.Services这个应用全局的容器,否则注册的服务不在同一个容器内,自然无法被解析。清理重建项目:有时候是编译缓存导致的问题,清理项目后重新生成再运行试试。
内容的提问来源于stack exchange,提问作者Robw
相关产品推荐
相关产品推荐

