5

Ich habe eine OrderFormViewModel geschaffen, Das geht auf meine Ansicht erstellen so etwas wieMVC-Modell Schnittstellen Bindung

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

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

} 

aussieht, wobei jeder Abschnitt (dh Lieferung Details, die Zahlungsdetails ... etc) wird dann an eine Teilansicht übergeben, die die notwendigen Felder erfasst.

Ich dachte, das war alles ganz ordentlich, bis ich es ausgeführt und erkannte natürlich, dass der MVC-Modellbinder nicht weiß, wie eine der Schnittstellen zu instanziieren.

Gibt es eine Möglichkeit, dies irgendwie zu lösen?

Ich versuche auch, DI mit dem Unity-Container zu lernen, also versuche ich, Referenzen auf irgendwelche konkreten Klassen in meinem UI-Projekt zu vermeiden (das Modell befindet sich in einem separaten Projekt).

Antwort

5

Eine Lösung besteht darin, ein benutzerdefiniertes Modellbinder zu erstellen, aber dieser Pfad bedeutet, dass Sie die Übersetzung von Formularelementen in Eigenschaften Ihres Objekts durchführen müssen. Sie haben jedoch vollständige Kontrolle darüber, welche Implementierung von IOrderDetails zum Beispiel verwendet wird, oder Sie können veranlassen, dass Ihr DI Ihnen den richtigen konkreten Typ anhand seiner Konfiguration gibt.