是否可以在没有依赖项注入(DDD)的情况下在聚合(域层)中实现MediatR?

时间:2019-01-18 00:17:57

标签: domain-driven-design aggregate mediatr domain-events

为防止重新发明轮子,我想在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

1 个答案:

答案 0 :(得分:2)

  

我应该避免在   聚集体。

不仅在构造函数中;您的业​​务层不应以任何形式依赖于非业务;甚至是静态的。

我要做的只是将域事件从聚合返回到应用程序层,然后发布域事件。

请阅读以下几篇文章,以更好地理解我的意思:

Don't publish Domain Events, return them! DDD-Application-Services-Explained