使用 AutoMapper,我可以覆盖属性的解析类型吗?例如,给定这些类:

public class Parent
{
    public Child Value { get; set; }
}

public class Child { ... }
public class DerivedChild : Child { ... }

我可以配置 AutoMapper 以使用 Child Value 实例自动映射 DerivedChild 属性吗?假设映射如下所示:
map.CreateMap<ChildEntity, DerivedChild>();
map.CreateMap<ParentEntity, Parent>()
   .ForMember(p => p.Value, p => p.UseDestinationType<DerivedChild>());

(我是 projecting from LINQ entities 。我能找到的最接近的是使用 custom type converter ,但看起来我需要覆盖整个映射。)

最佳答案

这是一种方法:

map.CreateMap<ChildEntity, DerivedChild>();

map.CreateMap<ParentEntity, Parent>()
    .ForMember(
        x => x.Value,
        opt => opt.ResolveUsing(
            rr => map.Map<DerivedChild>(((ParentEntity)rr.Context.SourceValue).Value)));
ResolveUsing 允许为映射值指定自定义逻辑。

这里使用的自定义逻辑实际上是调用 map.Map 来映射到 DerivedChild

关于c# - 使用 AutoMapper 覆盖解析的属性类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34910641/

10-11 22:28