Можно ли реализовать MediatR в агрегатах (уровень домена) без внедрения зависимостей (DDD)?

Чтобы не изобретать велосипед, я бы хотел использовать MediatR в Агрегатах для публикации событий домена. (Не) К счастью (?) MediatR работает как зависимость, которая вводится в классы, а не как то, что я могу назвать статически. Поэтому я бы в итоге создал прямую зависимость от библиотеки через конструктор.

Я не помню, где я читал это (и если я правильно понял), что я должен избегать некоммерческих зависимостей в конструкторах Агрегатов.

Поэтому я не должен делать что-то вроде этого:

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

Это заставило меня задуматься о том, возможно ли или рекомендуется (или не рекомендуется) использовать MediatR в агрегатах...

Есть ли способ для меня использовать MediatR статически или я должен внедрить свой собственный диспетчер событий?

PS: Кроме того, не стесняйтесь поправлять меня, если мое понимание агрегатных зависимостей неверно.

PS x2: Я искал Google и SO и не могу найти ответ на этот вопрос. https://stackru.com/search?q=mediatr+domain+events Как отделить MediatR от моего бизнес-уровня DDD: ссылка на интерфейс MediatR из проекта домена

1 ответ

Решение

Я должен избегать некоммерческих зависимостей в конструкторах Агрегатов.

Не только в конструкторах; ваш бизнес-уровень не должен иметь зависимостей от некоммерческих организаций в любой форме; даже статичный.

Я просто возвращаю событие домена из агрегата на уровень приложения, а затем публикую событие домена.

Пожалуйста, прочитайте эти пару постов, чтобы лучше понять, что я имею в виду:

Не публикуйте события домена, возвращайте их! DDD-приложений-служб-Разъяснения

Другие вопросы по тегам