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

Asp.net中MediatR的services.AddMediatR(typeof(Startup))用法及参数疑问

关于MediatR中AddMediatR(typeof(Startup))的疑问解答

services.AddMediatR(typeof(Startup))里传入Startup类型的核心目的,是给MediatR提供一个程序集扫描的锚点,具体拆解如下:

  • 为什么传Startup?
    因为Startup类和你的CQRS业务代码(请求、处理程序、通知等)通常在同一个项目(程序集)里。MediatR会通过这个类型找到它所在的程序集,然后自动扫描并注册该程序集中所有符合MediatR规则的类型——包括各种IRequest/IRequest<TResponse>请求、对应的IRequestHandler处理程序、INotification通知以及INotificationHandler处理器等,不需要你手动逐个注册这些服务。

  • 应该传哪种类型?
    完全不是必须传Startup,只要是和你的MediatR相关代码处于同一程序集的任意类型都可以:

    • 可以传某个具体的请求类,比如typeof(CreateUserCommand)
    • 可以传对应的处理程序类,比如typeof(CreateUserCommandHandler)
    • 甚至可以专门建一个空的标记类(比如MediatRAssemblyMarker),把它和业务代码放在一起,然后传这个标记类的类型

    如果你的MediatR组件分散在多个程序集里,还可以传入多个类型,比如:

    services.AddMediatR(typeof(Startup), typeof(ExternalCommands.MarkOrderShippedCommand))
    

    这样MediatR会扫描所有传入类型所在的程序集,把里面的MediatR相关服务都注册到容器中。

简单说,这个参数的作用就是告诉MediatR:“去扫这个类型所在的程序集,把里面的MediatR组件都注册上”,选哪个类型全看哪个方便,只要能定位到目标程序集就行。

内容的提问来源于stack exchange,提问作者b.g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:10:23