MVC模型绑定到接口

fea*_*net 6 c# dependency-injection interface model-binding asp.net-mvc-2

我创建了一个看起来像的OrderFormViewModel

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

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

}
Run Code Online (Sandbox Code Playgroud)

这将转到我的创建视图,其中每个部分(即交付详细信息,付款详细信息等)随后会传递到捕获必要字段的部分视图.

我认为这一切都非常简洁,直到我运行它并且当然意识到MVC模型绑定器不知道如何实例化任何接口.

有办法以某种方式解决这个问题吗?

我也在尝试使用Unity容器学习DI,所以我试图避免在我的UI项目中引用任何具体的类(模型在一个单独的项目中).

Tej*_*ejs 6

一种解决方案是创建自定义模型绑定器,但此路径意味着您需要完成将表单元素转换为对象属性的工作.但是,您可以完全控制IOrderDetails的实现,例如,或者您可以让DI使用它的配置为您提供正确的具体类型.