Я читал MVC 3 source code, пытаясь понять, какую семантику я должен придерживаться, если я переопределяю DefaultModelBinder.BindModel() или даже реализую IModelBinder.BindModel().Что должна сделать реализация BindModel()?
Непонятно, какое «состояние» BindModel() должно оставить другие объекты, как только это будет сделано с его работой. Уверен, что он должен вернуть значение, представляющее некоторую интерпретацию данных ValueProvider, но какие побочные эффекты он должен иметь? Например:
- Имеет ли MVC ожидания относительно состояния привязкиКонтекст передается в BindModel() * после того, как * закончен?
- Что, если что-нибудь, должен установить IModelBinder.BindModel() в ModelMetadata? (DefaultModelBinder устанавливает метаданные свойств в свой метод BindProperty(), вызываемый BindModel().)
- Если переопределение вызова DefaultModelBinder.BindModel() ModelState.AddModelError() или BindProperty() переопределяет более подходящее место (особенно если я хочу как можно больше использовать поведение DefaultModelBinder по умолчанию)?
DefaultModelBinder имеет так много семантики встроенной в его слесарном, что делает переопределение ничего, что чувствует очень опасно (то есть я чувствую, что я ничего не могу отменить, не нарушая Liskov principle). Отсутствие документации не помогает.