我一直在阅读MVC 3 源代码,试图了解如果我重写 DefaultModelBinder.BindModel() 甚至实现 IModelBinder.BindModel(),我应该遵循什么语义。
我不清楚 BindModel() 完成工作后应该将其他对象保留在什么“状态”中。当然,假设它返回一个代表对 ValueProvider 数据的某种解释的值,但是它应该有什么副作用呢?例如:
- MVC 是否对 *after* 方法完成后传递给 BindModel() 的 bindingContext 的状态有期望?
- IModelBinder.BindModel() 应该在 ModelMetadata 中设置什么(如果有的话)?(DefaultModelBinder 在其 BindProperty() 方法中设置属性元数据,由 BindModel() 调用。)
- 是否应该覆盖 DefaultModelBinder.BindModel() 调用 ModelState.AddModelError(),或者 BindProperty() 是否覆盖更合适的位置(特别是如果我想尽可能利用 DefaultModelBinder 的默认行为)?
DefaultModelBinder 在其管道中内置了如此多的语义,以至于覆盖任何东西都感觉非常危险(即,我觉得我不能在不违反Liskov 原则的情况下覆盖任何东西)。缺乏文档没有帮助。