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

.NET 6中MediatR未注册IRequestHandler问题及自动注册咨询

解决MediatR自动注册独立Application项目中处理器的问题

问题根源在于你当前仅扫描了Web项目的程序集(Assembly.GetExecutingAssembly()),而查询、命令及处理器都在独立的Application项目中,未被纳入扫描范围,导致DI容器找不到对应的IRequestHandler实现。

以下是几种自动完成注册的可行方案:

方案1:使用标记类获取Application程序集(推荐)

在Application项目中定义一个空的标记类/接口,作为程序集的锚点,后续通过这个类型自动定位到Application项目的程序集:

  1. 在Application项目中添加标记类:
namespace YourApp.Application;
// 空标记类,仅用于定位程序集
public class ApplicationAssemblyMarker { }
  1. 在Web项目的Program.cs中修改MediatR注册代码:
builder.Services.AddMediatR(cfg => 
    cfg.RegisterServicesFromAssembly(typeof(ApplicationAssemblyMarker).Assembly));

这种方式无需硬编码程序集名称,后续在Application项目中新增的查询、处理器都会被自动扫描注册,维护成本最低。

方案2:通过程序集名称加载

如果明确知道Application项目的程序集名称,可以直接加载该程序集进行注册:

var applicationAssembly = Assembly.Load("YourApp.Application");
builder.Services.AddMediatR(cfg => 
    cfg.RegisterServicesFromAssembly(applicationAssembly));

注意:需确保程序集名称拼写完全一致,若后续程序集名称变更,需同步修改此处代码。

方案3:批量扫描多个相关程序集

如果存在多个包含MediatR类型的类库项目(如Domain、Infrastructure等),可以一次性扫描多个程序集:

builder.Services.AddMediatR(cfg => 
    cfg.RegisterServicesFromAssemblies(
        typeof(ApplicationAssemblyMarker).Assembly,
        // 可添加其他需要扫描的程序集标记类
        typeof(DomainAssemblyMarker).Assembly));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:13:12