DefaultModelBinder.BindModel() をオーバーライドしたり、IModelBinder.BindModel() を実装したりする場合に準拠する必要があるセマンティクスを理解しようとして、 MVC 3 ソース コードを読んでいます。
作業が完了したら、BindModel() が他のオブジェクトをどの「状態」に残す必要があるかは、私にはわかりません。確かに、ValueProvider データの何らかの解釈を表す値を返すと想定されていますが、どのような副作用があると想定されているのでしょうか? 例えば:
- MVC は、メソッドが終了した *後* BindModel() に渡された bindingContext の状態について期待していますか?
- ModelMetadata で IModelBinder.BindModel() を設定する必要があるとすれば、それは何ですか? (DefaultModelBinder は、BindModel() によって呼び出される BindProperty() メソッドでプロパティ メタデータを設定します。)
- DefaultModelBinder.BindModel() のオーバーライドで ModelState.AddModelError() を呼び出す必要がありますか、それとも BindProperty() でより適切な場所をオーバーライドする必要がありますか (特に、DefaultModelBinder のデフォルトの動作を可能な限り利用したい場合)。
DefaultModelBinder には非常に多くのセマンティクスが配管に組み込まれているため、何かをオーバーライドすると非常に危険に感じられます (つまり、リスコフの原則に違反せずに何かをオーバーライドすることはできないように感じます)。ドキュメントの欠如は役に立ちません。