Я прошел через тот же вызов, и вот как я это сделал.У нас был IUnitOfWork и ITransaction: с Commit () и Rollback () мы добавили класс для TransactionalOperation: ITransaction, чтобы добавить поддержку транзакционного поведения для не-db вещей.IUnitOfWork.Commit () перебирает список TransactionalOperations, которые могли бы быть добавлены к нему.
Теперь, чтобы связать шину с нашей системой: Добавлен IBus для обертывания внешней шины. Реализован MassTransitBusGateway: IBus, чтобы связатьшина к единице работы: Реализовано UnitOfWorkBus: IBus (декоратор) - этот декоратор делает любые вызовы Publish (), чтобы узнать о единице работы и добавить ее как TransactionalOperation, так что его выполнение задерживается до UnitOfWork.Commit ()
Таким образом, мы абстрагируем конкретную шину, избегая, таким образом, добавления зависимостей MassTransit для нескольких проектов (это действительно нужно только клиентам) и добавления поведения транзакций к его операциям.