Asp.net core mvc ASP.NET核心MVC-包含使用接口的属性的绑定模型
我有一个模型,它包含一个基于接口的属性,具体的实现可以通过模型的另一个属性发现Asp.net core mvc ASP.NET核心MVC-包含使用接口的属性的绑定模型,asp.net-core-mvc,asp.net-core-1.1,Asp.net Core Mvc,Asp.net Core 1.1,我有一个模型,它包含一个基于接口的属性,具体的实现可以通过模型的另一个属性发现 public class SubscriptionViewModel { public Guid Id { get; set; } ... public SubscriptionTypeEnum SubscriptionType { get; set; } // <- Determines the concrete class public ISubscriptionCriter
public class SubscriptionViewModel
{
public Guid Id { get; set; }
...
public SubscriptionTypeEnum SubscriptionType { get; set; } // <- Determines the concrete class
public ISubscriptionCriteria SubscriptionCriteria { get; set; } //<- Property based on interface class
...
}
这是因为控制器不知道该接口使用哪个实体实现
有没有办法解决这个问题?使用自定义的IModelBinderProvider
或BindingBehaviorAttribute
似乎可以实现这一点
我想我可以有一个
SuperSubscriptionCriteria
实现,它包含ISubscriptionCriteria
的具体实现所使用的所有可能属性,然后依靠AutoMapper将它们转换为真正的实现。但是这看起来像是一个黑客行为,并且随着新的ISubscriptionCriteria
实现的添加,这将需要持续维护。在ViewModel中将ISubscriptionCriteria
作为属性的目的是什么?我只是好奇。根据订阅的类型,有几种不同的标准类型可用,特定于某些订阅。在这种情况下,订阅是关于许可数据的电子邮件警报-www.permitwatch.co.nz实际实现如何分配给ISubscriptionCriteria
?通常情况下,MVC的ViewMode没有外部依赖项,除非您将其用作MVVM的视图模型。AutoMapper用于从其他类填充ViewModel,我以前的一个q可能会提供更多详细信息-
[HttpPost("api/[controller]/[action]")]
public async Task Post([FromBody]SubscriptionViewModel model)
{
...
}