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

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

为了避免重新发明轮子,我想在聚合中使用 MediatR 来发布领域事件。 (Un)幸运的是(?)MediatR 作为注入(inject)到类中的依赖项工作,而不是我可以静态调用的东西。因此,我最终会通过构造函数创建对库的直接依赖。

我不记得我是在哪里读到的(如果我没看错的话),我应该避免聚合构造函数中的非业务依赖。

因此,我不应该这样做:

public class MyAggregate
{
    private readonly IMediator _mediator;
    public MyAggregate(IMediator mediator)
    {
        _mediator = mediator;
    }
}

这让我深入思考是否可以或推荐(或不推荐)在聚合中使用 MediatR...

有没有办法让我静态使用 MediatR,或者我应该实现自己的事件调度程序?

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

最佳答案

I should avoid non-business dependencies in the constructors of the Aggregates.

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

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

请阅读这两篇文章以更好地理解我的意思:

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

关于domain-driven-design - 是否可以在没有依赖注入(inject) (DDD) 的情况下在聚合(域层)中实现 MediatR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54246127/

相关文章:

spring-boot - 架构域模型和 View 模型

domain-driven-design - 何时使用领域事件与双重调度

java - DDD 中聚合通信的正确方法

javascript - 聚合多个对象数组并汇总它们的属性

r - 使用 data.table 聚合小计和总计

c# - 某些服务无法在 ASP.NET Core 中构建

domain-driven-design - 带有 DB id 和实体的值对象的 DDD 类设计困境

r - 通过应用多列函数聚合表

c# - Visual Studio 找不到 SingleInstanceFactory

asp.net-core - 如何建模将路径段绑定(bind)到对象属性