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

MediatR v12迁移问题:RequestHandler无法自动检测

MediatR v12升级后无法检测RequestHandlers的解决办法

问题根源

升级到MediatR v12后抛出No service for type 'MediatR.IRequestHandler2[...]' has been registered`异常,核心原因是:

  • MediatR v12重构了DI扩展逻辑,默认仅扫描调用AddMediatR的当前程序集(即Api层)
  • 你的RequestHandler位于独立的Application层,未被扫描到,导致未注册到DI容器

修复步骤

1. 调整MediatR注册代码

在Api层的Program.cs中,修改AddMediatR的配置,显式指定扫描Application层的程序集:

services.AddMediatR(cfg =>
{
    // 方法1:通过Application层的标记类获取程序集(推荐)
    cfg.RegisterServicesFromAssembly(typeof(Application.AssemblyMarker).Assembly);
    
    // 方法2:直接使用Application层中任意Handler的类型
    // cfg.RegisterServicesFromAssembly(typeof(GetWeatherQueryHandler).Assembly);
});

如果Application层没有标记类,添加一个空类即可:

namespace Application;
public class AssemblyMarker { }

2. 验证依赖配置

MediatR v12已将DI扩展集成到主包,无需安装MediatR.Extensions.Microsoft.DependencyInjection,你的v12项目依赖配置是正确的:

  • Api项目:保留MediatR和MediatR.Extensions.FluentValidation.AspNetCore
  • Application项目:保留MediatR即可

版本差异说明

  • MediatR v11:依赖单独的MediatR.Extensions.Microsoft.DependencyInjection包,部分场景下默认扫描范围更广
  • MediatR v12:DI扩展合并到主包,默认仅扫描当前程序集,必须显式指定其他程序集才能发现跨层的Handler

内容的提问来源于stack exchange,提问作者andre santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:43:13