使用 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 和 CQRS 测试。如何验证调用了该处理程序?
如何使用 FluentAssertions 在 XUnit 中测试 MediatR 处理程序