Как отделить 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. Затем, если вы меняете библиотеки (маловероятно), вам просто нужно обновить базовые классы, а остальная часть агрегата остается нетронутой.

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