2015-10-20 7 views
0

Я использую MediatR с большим успехом в моем текущем проекте. Идея использования mediator pipeline для решения сквозных проблем действительно хороша.У вас есть один Request/RequestHandler для всех входящих запросов

Одна вещь, которую я не получаю (и, может быть, причина в том, что я не подвергаюсь воздействию C# covariance/contravariance), как я могу обрабатывать все входящие запросы в одном обработчике? Я хотел бы, чтобы выполнить действие до того, как запрос выполняется независимо от их типа:

IRequest 

или

IRequest<Foo> 

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

Любые идеи, пожалуйста?

+0

Понятия не имеет, что MediatR есть, но не '' IRequest не наследует от 'IRequest' ? Если нет, это было бы глупо. Изменить: согласно источнику, 'IRequest: IRequest ', где 'Unit' является общим параметром' out'. Конечно, вы можете что-то сделать с этим, например, допустив, чтобы ваш Foo' наследовал от «Unit». – CodeCaster

+0

Я бы выбрал все мои параметры наследования от Unit, что не представляется возможным? –

ответ

0

Вот как я это делаю с Castle Windsor и Mediatr (скажем, мы хотим регистрировать и разрешать вызовы для каждого обработчика). См. Текст, который я сделал: Decorator unit test

Обратите внимание, что при регистрации обработчиков с контейнером (Castle Windsor в моем случае) вам необходимо зарегистрировать их в правильном порядке (в Виндзоре, по крайней мере, YMMV).

Кроме того, обратите внимание, что я делаю исключение при регистрации компоненты (для декораторов, регистрировать все конкретные типы кроме других обработчиков декоратор.)