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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:26:23