C# MVC4中接口的模型绑定

C# MVC4中接口的模型绑定,c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,我看到了这篇关于如何创建模型绑定器提供程序以支持接口的博客文章 然而,我对如何处理实际的模型活页夹感到困惑 我知道我可以继承DefaultModelBinder,但是如何在自定义模型绑定器中计算出相关的具体类,您是否在CreateModel函数中执行此操作?如果是这样,你怎么做 我的接口和一些类的示例结构: public interface IAnswerControlViewModel : IQuestionAnswerControl { ... } public class AnswerC

我看到了这篇关于如何创建模型绑定器提供程序以支持接口的博客文章

然而,我对如何处理实际的模型活页夹感到困惑

我知道我可以继承DefaultModelBinder,但是如何在自定义模型绑定器中计算出相关的具体类,您是否在CreateModel函数中执行此操作?如果是这样,你怎么做

我的接口和一些类的示例结构:

public interface IAnswerControlViewModel : IQuestionAnswerControl
{
...
}

public class AnswerControl<T> : IAnswerControlViewModel
{
..
}

public class AnswerCheckBox : AnswerControl<bool>
{

}

public class AnswerMultiLineText : AnswerControl<string>
{
    [DataType(DataType.MultilineText)]
    public override string Value { get; set; }
}

public class AnswerCheckBoxListModal: AnswerControl<AnswerMultiSelectListValueType>
{
    public string ModalName { get; set; }
}
我们的目标是让MVC知道如何在发布操作期间对此进行建模绑定:

public IList<IAnswerControlViewModel> AnswerControls { get; set; }

如果我没有弄错您的问题,您的解决方案可能是使用依赖项注入/反转控制框架,如,但是。根据框架的不同,您可以配置从接口到具体类的映射

然后,您只需使用以下命令解析具体类:

var concrete = IoCContainer.Resolve<IAnswerControlViewModel>();

而且一切都是自动工作的。

我已经在使用Ninject,但我不知道如何将其应用于模型绑定。我的情况似乎比你的例子更复杂,因为我有一个通用的AnswerControl类,它使用该接口,但也有其他从AnswerControl继承的类,它们应该在同一个AnswerControl列表中。到目前为止,我已经找到了这篇文章,其中有一个示例抽象模型绑定器,它解释了更多关于处理我的情况的信息,但我还没有找到一个解决方案还没有。在某个时候,您必须配置/告诉模型绑定器或IoC容器要绑定哪个模型,我认为它无法猜测哪个模型是正确的,因为您可能有多个相同的具体实现等。也许您希望有一个硬编码或配置的字典,描述要映射的类型?可能会让你的生活更轻松。只是想一想:
var concrete = IoCContainer.Resolve<IAnswerControlViewModel>();
var concrete = IoCContainer.Resolve(ModelBindingContext.ModelType);