【发布时间】:2019-01-10 15:53:03
【问题描述】:
上下文是我想将dynamic dapper 结果映射到一个对象,并且该对象具有一个具有接口类型的属性:
public class TargetModel
{
public int Id { get; set; }
public IAddress AbstractAddress { get; set; }
}
动态到对象位是直截了当的,但我无法配置 AutoMapper 来告诉它如何处理接口。
dynamic sourceModel = new ExpandoObject();
// flat model - id should map to TargetModel, Address01 will map to a nested type Address on TargetModel
sourceModel.Id = 1;
sourceModel.Address01 = "address01";
// for debugging purposes address maps ok from dynamic
Address address = Mapper.Map<Address>(sourceModel);
// this maps, but AbstractAddress is null - I need to config AutoMapper to understand how to map IAddress to Address
TargetModel target = Mapper.Map<TargetModel>(sourceModel);
我试图告诉它如何处理该属性:
CreateMap<ExpandoObject, TargetModel>()
.ForMember(y => y.AbstractAddress, opts => opts.MapFrom(f => f));
失败的原因是:
System.ArgumentException: 无法创建接口类型的实例
所以我试图暗示具体:
CreateMap<IAddress, Address>().As<Address>();
这不能解决问题并且异常仍然存在。
我查看了以下问题/概念并尝试了各种配置选项,但无法使地图正常工作:
【问题讨论】:
-
“不知道如何处理”和“goes pear”是模棱两可的问题描述。你能告诉我们具体的问题吗?例如。编译或运行时错误、数据未复制、数据复制不正确等
-
@JohnWu 更新为更具体。
-
@LucianBargaoanu 我可以看到它在没有配置/提示的情况下映射了动态,但我不知道如何确保映射带有接口的属性。
-
您需要创建一个从字符串到 IAddress 的映射。默认情况下,AM 将创建一个代理,但如果您需要 Address,则必须使用 As 告诉 AM。
标签: c# .net dynamic automapper