You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Scoped Service注入IMemoryCache时DI无法解析参数问题求助

可能的问题原因
  • AddMemoryCache注册位置错误:服务注册代码未放在Startup.cs的ConfigureServices方法中,或是在.NET 6+的顶级语句Program.cs中,将注册代码写在了builder.Build()之后,导致服务未被实际注册到容器中。
  • NuGet包引用缺失或版本不兼容:存放UserService的类库项目,或是主Web项目未安装Microsoft.Extensions.Caching.Memory包,或是包版本与项目的.NET目标框架版本不匹配,导致容器无法识别对应的服务类型。
  • 服务注册被覆盖:如果额外通过Autofac自定义模块、手动注册等方式重复注册了IUserService或UserService,错误的注册逻辑覆盖了默认的依赖绑定规则,导致容器无法自动解析构造函数参数。
  • 类型命名冲突:项目中自定义了同名的IMemoryCache类型,导致构造函数注入的类型和AddMemoryCache注册的类型不是同一个命名空间下的类型,容器无法匹配到对应的服务。
可行解决方案
  • 修正服务注册位置:确保services.AddMemoryCache()和services.AddScoped<IUserService, UserService>()都在ConfigureServices方法内,或是.NET 6+版本中写在var builder = WebApplication.CreateBuilder(args)之后、var app = builder.Build()之前的位置。
  • 补全并匹配NuGet包:检查所有相关项目的NuGet引用,安装版本与项目框架一致的Microsoft.Extensions.Caching.Memory包,同时确认UserService构造函数中注入的IMemoryCache是Microsoft.Extensions.Caching.Memory命名空间下的官方类型,没有自定义类型冲突。
  • 清理重复注册逻辑:移除Autofac模块等位置对IUserService/UserService的重复注册,确保仅保留一处服务注册逻辑;如果必须手动在Autofac中注册,需要明确指定构造函数依赖从容器获取,示例注册逻辑如下:
builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope();
  • 补充必要的关联服务注册:报错中构造函数还依赖IHttpContextAccessor,需要在ConfigureServices中补充注册services.AddHttpContextAccessor(),避免后续出现该服务的解析错误。

内容的提问来源于stack exchange,提问作者Ash Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:00