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

不同类库中MediatR查询类注册失效问题及解决方法咨询

MediatR自动注册CQRS查询失效的原因与解决办法

失效原因

Assembly.GetExecutingAssembly()获取的是当前运行的程序集——也就是你的.NET6 Web项目程序集,而你的GetAllProductsQuery等CQRS类放在独立的类库项目中,这个类库程序集不在扫描范围内,所以MediatR无法找到这些类,自动注册自然不生效。

解决办法(无需逐个显式注册)

1. 通过类库中的类型定位程序集

直接用类库中任意一个CQRS类型(比如GetAllProductsQuery)来获取其所在程序集,让MediatR扫描整个类库:

builder.Services.AddMediatR(typeof(GetAllProductsQuery).Assembly);

这种方式最常用,不需要硬编码程序集名称,还能自动适配类库程序集的变更。

2. 直接加载类库程序集

如果明确知道类库的程序集名称,可以直接加载并传入:

var libraryAssembly = Assembly.Load("YourClassLibraryProjectName");
builder.Services.AddMediatR(libraryAssembly);

注意替换YourClassLibraryProjectName为实际的类库项目名称(通常和程序集名称一致,除非手动修改过输出设置)。

3. 扫描多个程序集(多类库场景)

如果CQRS类分散在多个类库中,可以一次性传入多个程序集:

var webAssembly = Assembly.GetExecutingAssembly();
var productLibraryAssembly = typeof(GetAllProductsQuery).Assembly;
var orderLibraryAssembly = typeof(GetAllOrdersQuery).Assembly;
builder.Services.AddMediatR(webAssembly, productLibraryAssembly, orderLibraryAssembly);

额外注意事项

确保类库中的CQRS类符合MediatR的约定:

  • 查询/命令类需实现IRequest<TResponse>接口
  • 对应的处理器类需实现IRequestHandler<TQuery, TResponse>接口
    只有符合约定的类才会被MediatR扫描并注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:31:18