Можно ли реализовать 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-приложений-служб-Разъяснения