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
相关产品推荐
相关产品推荐

