为防止重新发明轮子,我想在Aggregates中使用MediatR发布域事件。 (Un)Fortunately(?)MediatR用作注入到类中的依赖项,而不是我可以静态调用的依赖项。因此,我最终将通过构造函数在库上创建直接依赖项。
我不记得在哪里阅读(如果我没看错的话),我应该避免在聚合的构造函数中出现非业务依赖性。
因此,我不应该这样做:
public class MyAggregate
{
private readonly IMediator _mediator;
public MyAggregate(IMediator mediator)
{
_mediator = mediator;
}
}
这使我深入思考是否可以或建议(或不建议)在聚合中使用MediatR ...
我是否可以静态使用MediatR,还是应该实现自己的Event Dispatcher?
P.S:另外,如果我对聚合依赖项的理解不正确,请随时纠正我。
P.S x2: 我已经搜索过Google和SO,但找不到答案。 https://stackoverflow.com/search?q=mediatr+domain+events How to decouple MediatR from my business layer DDD: Referencing MediatR interface from the domain project
答案 0 :(得分:2)
我应该避免在 聚集体。
不仅在构造函数中;您的业务层不应以任何形式依赖于非业务;甚至是静态的。
我要做的只是将域事件从聚合返回到应用程序层,然后发布域事件。
请阅读以下几篇文章,以更好地理解我的意思:
Don't publish Domain Events, return them! DDD-Application-Services-Explained