Привязка модели MVC к интерфейсам - PullRequest
6 голосов
/ 11 июня 2010

Я создал OrderFormViewModel , который выглядит примерно так:

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

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

}

Это относится к моему Создать представлению, где каждый раздел (т.е. данные о доставке, платежные данные и т. Д.) Затем передается в частичное представление, в котором содержатся необходимые поля.

Я думал, что это все довольно аккуратно, пока не запустил его и не понял, конечно, что механизм связывания модели MVC не знает, как создать какой-либо из интерфейсов.

Есть ли способ как-то решить эту проблему?

Я также пытаюсь изучить DI с помощью контейнера Unity, поэтому я стараюсь избегать ссылок на какие-либо конкретные классы в моем проекте пользовательского интерфейса (модель находится в отдельном проекте).

Ответы [ 2 ]

6 голосов
/ 11 июня 2010

Одним из решений является создание привязки пользовательской модели, но этот путь означает, что вам нужно будет приложить усилия для преобразования элементов формы в свойства вашего объекта.Однако у вас есть полный контроль над тем, какая реализация IOrderDetails используется, например, или вы можете сделать так, чтобы ваш DI дал вам правильный конкретный тип, используя его конфигурацию.

2 голосов
/ 27 октября 2011

Возможное решение может быть здесь (в разделе Фильтр привязки интерфейса против привязки модели): http://codetunnel.com/aspnet-mvc-model-binding-security/

...