6

次のようなOrderFormViewModelを作成しました

public class OrderFormViewModel 
{
    public IOrderDetails { get; set; }
    public IDeliveryDetails { get; set; }
    public IPaymentDetails { get; set; }
    // ... etc

    public SelectList DropDownOptions { get; set; }
    // ... etc

}

これは作成ビューに移動し、そこで各セクション (配送の詳細、支払いの詳細など) が必要なフィールドをキャプチャする部分ビューに渡されます。

実行するまでは、これはすべて非常にきちんとしたものだと思っていましたが、もちろん、MVC モデル バインダーはインターフェイスのインスタンスを作成する方法を知らないことに気付きました。

これを何とか解決する方法はありますか?

また、Unity コンテナーを使用して DI を学習しようとしているため、UI プロジェクト (モデルは別のプロジェクトにあります) で具象クラスへの参照を避けるようにしています。

4

2 に答える 2

6

1 つの解決策は、カスタム モデル バインダーを作成することですが、この方法では、フォーム要素をオブジェクトのプロパティに変換する作業が必要になります。ただし、たとえば、IOrderDetails のどの実装を使用するかを完全に制御したり、DI の構成を使用して適切な具象型を提供したりすることができます。

于 2010-06-11T15:23:01.100 に答える
2

考えられる解決策は次のとおりです (インターフェイス バインディング フィルターとビュー モデル バインディングの下): http://codetunnel.com/aspnet-mvc-model-binding-security/

于 2011-10-27T10:24:54.103 に答える