MediatR如何确定调用对应的处理器?
MediatR 是怎么找到对应处理器的?
MediatR 核心靠泛型接口约定 + 依赖注入扫描来完成请求与处理器的匹配,具体逻辑是这样的:
- 接口约定绑定:你定义的
GetPersonListQuery肯定实现了IRequest<List<PersonModel>>接口,而对应的处理器必须实现IRequestHandler<GetPersonListQuery, List<PersonModel>>——这个泛型接口就是请求和处理器之间的绑定约定。 - 启动时扫描注册:在应用启动阶段(比如ASP.NET Core的
Program.cs配置DI时),MediatR会通过反射扫描所有程序集,找出所有实现了IRequestHandler<,>的类型,并把它们注册到依赖注入容器中,同时和对应的请求类型(你的Query/Command)建立关联。 - 运行时动态匹配:当你调用
_mediator.Send(new GetPersonListQuery())时,MediatR会根据传入请求对象的具体类型,从DI容器中找到对应的IRequestHandler实现类,实例化后调用它的Handle方法,最终返回处理结果。
至于你在Visual Studio里看到处理器的引用数为0,这完全正常——因为这里没有代码层面的直接硬引用,整个匹配过程是运行时通过反射和DI完成的,编译期不会生成直接的调用关系。
内容的提问来源于stack exchange,提问作者EBDS
相关产品推荐
相关产品推荐

