Можно ли установить собственный ModelBinder для всего контроллера? - PullRequest
2 голосов
/ 12 августа 2011

У меня есть пользовательский механизм связывания моделей, и я знаю два способа присвоения его методу действия:

Либо в методе:

public ActionResult MyAction([ModelBinder(typeof(MyCustomModelBinder))] ModelClass filter

Или глобально в global.asax.cs:

ModelBinders.Binders.Add(typeof(MyCustomModelBinder))

Но мне интересно, есть ли способ назначить привязку пользовательской модели на контроллере?Так это работает для всех методов в контроллере, но не глобально?

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

В вашей модели Binder у вас есть доступ к ControllerContext.Так что должно быть легко связать вашу модель на основе имеющейся там информации о контроллере.

Это немного пахнет, потому что вы создаете связь между привязкой вашей модели и контроллером.Но если вы используете DI для создания шаблона стратегии и вставляете преобразователь связывателя в ModelBinderContainer, который затем использует свои знания вашей системы для выбора желаемой привязки, у вас будет ваше решение.

0 голосов
/ 12 августа 2011

Нет, насколько я знаю, и это не имеет большого смысла логически, поскольку ModelBinder привязан к модели либо глобально в коллекции Binder (или путем добавления атрибута непосредственно в класс модели), либо локально в модели действие.

Однако вы все равно можете достичь желаемого, создав Aspect (как в Aspect Oriented Programming) с помощью инструмента, подобного PostSharp . Вы сможете применить этот аспект на уровне контроллера, и он внедрит атрибуты ModelBinder во все методы в качестве шага после компиляции. Вопрос в том, хотите ли вы пройти через все эти неприятности и, что более важно, принесут ли они какую-либо ценность.

Пример аспекта декоратора атрибута доступен в документации PostSharp здесь .

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