使用 MediatR 时可以让一个处理程序调用另一个处理程序吗?

Posted

技术标签:

【中文标题】使用 MediatR 时可以让一个处理程序调用另一个处理程序吗?【英文标题】:Is it OK to have one handler call another when using MediatR? 【发布时间】:2018-08-09 01:47:15 【问题描述】:

或者这被认为是不好的做法还是什么?

我有一个通知触发 4-5 个处理程序,它们依次调用数据库来检索数据。每个这些调用也可以单独调用,因此它们本身就是请求/处理程序。

谢谢。

【问题讨论】:

你说的是this library吗? 我已经做到了。没关系,只要你管理好。但是,如果您不小心,这是进入堆栈溢出异常的一种快速方法。保持处理程序小,你会没事的 @DannyChen 是的。 @Alex 谢谢。溢出,你的意思是进入循环调用?现在我再次查看它,其中一些子调用大多是内部调用,没有来自最终用户的直接“请求”。也许把它们写成“服务”? 是的,就是这样。 AbcHandler 调用 XyzHandler,后者又调用 AbcHandler 【参考方案1】:

Jimmy Bogard(mediatr 的作者)说你应该避免这种情况。

查看他的博文

https://lostechies.com/jimmybogard/2016/12/12/dealing-with-duplication-in-mediatr-handlers/

或者这个堆栈溢出问题和答案 https://github.com/jbogard/MediatR/issues/400

另请注意,如果您使用行为,它们将运行多次。这可能会导致代码效率低下,但当然也可能是您想要发生的事情:-)

【讨论】:

虽然这可能会回答问题,但请考虑链接失效的事实。因此,请考虑总结您链接到的内容。

以上是关于使用 MediatR 时可以让一个处理程序调用另一个处理程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MediatR 链接处理程序

MediatR 和 CQRS 测试。如何验证调用了该处理程序?

如何使用 FluentAssertions 在 XUnit 中测试 MediatR 处理程序

Mediatr:单元测试行为/验证

导航到 Visual Studio 2019(或 Rider)中的 MediatR 处理程序

Mediatr 范围问题