Что должна делать реализация BindModel ()? - PullRequest
3 голосов
/ 03 февраля 2011

Я читал исходный код MVC 3 , пытаясь понять, какой семантики мне следует придерживаться, если я переопределяю DefaultModelBinder.BindModel () или даже реализую IModelBinder.BindModel ().

Мне неясно, какое «состояние» BindModel () должно оставить другим объектам после завершения работы. Конечно, предполагается возвращать значение, представляющее некоторую интерпретацию данных ValueProvider, но какие побочные эффекты это должно иметь? Например:

  • Есть ли у MVC ожидания относительно состояния bindingContext, передаваемого в BindModel () * после * завершения метода?
  • Что, во всяком случае, должен IModelBinder.BindModel () установить в ModelMetadata? (DefaultModelBinder устанавливает метаданные свойства в своем методе BindProperty (), вызываемом BindModel ().)
  • Должно ли переопределение DefaultModelBinder.BindModel () вызывать ModelState.AddModelError () или BindProperty () переопределяет более подходящее место (особенно если я хочу максимально использовать преимущества поведения DefaultModelBinder по умолчанию)?

DefaultModelBinder имеет так много семантики, встроенной в его слесарное дело, что делает переопределение всего, что чувствует очень опасным (то есть я чувствую, что не могу ничего переопределить, не нарушив принцип Лискова ) , Отсутствие документации не помогает.

1 Ответ

0 голосов
/ 03 февраля 2011

Если вам нужно пользовательское связывание, я бы реализовал интерфейс IModelBinder и сделал все необходимое для создания вашего объекта.

...