MediatR请求处理程序构造错误:已配置Startup依赖仍报错求排查
请提供需要格式化的具体内容,我会按照指定的Markdown规则为你处理。
如果是针对你之前提出的MediatR依赖注入问题,按照要求整理后的回答如下:
MediatR请求处理程序构造错误排查
核心问题与修复方案
1. 仓储依赖未完成注册
你的AddInfoRequestHandler构造函数依赖具体类型Repository,但配置中未注册该类型;同时InfoUtility依赖IRepository接口,也缺少接口与实现的映射:
- 先补充仓储的注册:
services.For<IRepository>().Use<Repository>(); - 建议修改
AddInfoRequestHandler的构造参数为接口IRepository,遵循依赖倒置原则:private IRepository Repository { get; set; } public AddInfoRequestHandler(IRepository repository, InfoUtility infoUtility) { Repository = repository; InfoUtility = infoUtility; }
2. MediatR注册方式不规范
你单独注册单个请求处理程序的方式效率低且易遗漏,建议替换为批量注册:
// 自动注册当前程序集中所有MediatR请求/处理程序 services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(AddInfoRequestHandler).Assembly));
删除原有的services.For<IRequestHandler<AddInfoRequest, ResponseBase>>().Use<AddInfoRequestHandler>()代码。
3. 配置代码语法错误
原注册代码第一行末尾缺少分号,会导致编译错误:
// 修复前 services.For<IRequestHandler<AddInfoRequest, ResponseBase>>() .Use<AddInfoRequestHandler>() // 修复后 services.For<IRequestHandler<AddInfoRequest, ResponseBase>>() .Use<AddInfoRequestHandler>();
4. 验证连接字符串配置
确保appsettings.json中存在对应配置项:
{ "ConnectionStrings": { "Info": "你的数据库连接字符串内容" } }
修复后的完整配置示例
// 注册仓储接口与实现 services.For<IRepository>().Use<Repository>(); // 注册InfoUtility并注入连接字符串 services.For<InfoUtility>() .Use<InfoUtility>() .Ctor<string>("ConnectionString") .Is(x => x.GetInstance<IConfiguration>().GetConnectionString("Info")); // 批量注册MediatR组件 services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(AddInfoRequestHandler).Assembly));
内容的提问来源于stack exchange,提问作者Pratex
相关产品推荐
相关产品推荐

