Как отделить MediatR от уровня моего бизнеса
Доброе утро.
Я использую доменные события в своем проекте, и я нашел самый простой способ реализовать это, используя MediatR. Но я не хочу, чтобы мой проект напрямую зависел от него, я хочу применить инверсию зависимостей, чтобы скрыть библиотеку.
Текущий код, имеющий зависимость в Mediator из-за интерфейса INotification
public class EmailConfirmedEvent : INotification
{
public Guid PassengerId { get; }
public string Email { get; }
public EmailConfirmedEvent(Guid passengerId, string email)
{
Email = email;
PassengerId = passengerId;
}
}
Но я хочу быть таким:
public class EmailConfirmedEvent : IMyProjectDomainEvent
{
public Guid PassengerId { get; }
public string Email { get; }
public EmailConfirmedEvent(Guid passengerId, string email)
{
Email = email;
PassengerId = passengerId;
}
}
Каким-то образом мне нужно будет "конвертировать" медиаторы / обработчики событий в события моего проекта / обработчики событий.
Какой лучший способ сделать это. Заранее спасибо.
2 ответа
В итоге я создал свой собственный код события домена, используя StructureMap и отражение, чтобы разрешить обработчики событий во время выполнения. Пример кода здесь: https://github.com/Henry-Keys/domain-events-sample
Я обычно делаю базовые классы, которые наследуются от интерфейсов / базы MediatR. Затем, если вы меняете библиотеки (маловероятно), вам просто нужно обновить базовые классы, а остальная часть агрегата остается нетронутой.