Интерфейс и оболочка, пользовательское связывание модели или ActionFilter для предоставления общего класса контроллерам? - PullRequest
0 голосов
/ 23 июня 2011

Мне нужно предоставить моим методам действия контроллера доступ к общему экземпляру класса (назовем его UserSessionInfo), содержащему информацию о пользовательских приложениях.

В данный момент он извлекается непосредственно из сеанса http базовым контроллером, но я пытаюсь удалить все зависимости от объектов, зависящих от HTTPContext, чтобы сделать контроллеры более чистыми и более тестируемыми.

Насколько я понимаю,Есть три возможных решения:

  1. Внедрить его в конструктор контроллера
  2. ActionFilter для предоставления UserSessionInfo каждому методу действия.
  3. Реализация IModelBinder для предоставления UserSessionInfo длякаждый метод действия.

У меня есть приличное понимание 1. Изо всех сил пытаюсь уловить разницу между 2 и 3.

Любая помощь приветствуется.

Спасибо,

Мэтт

1 Ответ

3 голосов
/ 03 января 2012

Самое большое различие между ActionFilters и ModelBinder - это то, что они не могут сделать, их связь и ожидание разработчика.

ModelBinder выполняется перед действием actionfilter специально для привязки данных запроса к модели.он не знает, какое действие он выполняет.Он связан с процессом привязки

Фильтр действия знает о действии и его параметрах, которые фильтр действия выполняет после связывателя модели, и может изменять данные, возвращаемые связывателем модели.Это связано с выполнением действия

Вероятно, самая большая разница - ожидание разработчика.Ожидается, что ModelBinder будет относительно легок в разборе, извлечении и заполнении только объектов.

Ожидается, что Actionfilter будет «делать вещи», принимать решения, влиять на конвейер обработки при определенных условиях.

Hopeэти свободные рекомендации полезны!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...