我正在尝试映射两个对象,并且目标包含需要其他数据源的数据。这些是类:
public class SourceClass {
public int SrcValueOne { get; set; }
}
public class DestClass {
public int DestValueOne { get; set; }
public int ValueFromConfig { get; set; }
}
public class ConfigSettings {
public int ConfigValueOne { get; set; }
}
我需要将SourceClass中的值映射到DestClass,同时将填充的ConfigSettings对象(在运行时)传递给Map()并从那里读取一些值。到目前为止,我发现的所有方法都是ResolveUsing
方法似乎并不理想。我想知道是否有办法做类似的事情:
Mapper.CreateMap<SourceClass, DestClass>()
.ForMember(dest => dest.DestValueOne, src => src.MapFrom(a => a.SrcValueOne))
.ForMember(dest => dest.ValueFromConfig, src => opt.ResolveUsing<ConfigSettings>.FromMember(config => config.ConfigValueOne);
我想出了如何使用Items集合在运行时在Map()
中传递填充的对象,但无法确定是否有办法在ResolveUsing 中使用来访问它创建解析器和/或使用反射。
答案 0 :(得分:1)
Mapper.CreateMap<ConfigSettings, DestCLass>()
.ForMember(dest => dest.ValueFromConfig, opt => opt.MapFrom(s => s.ConfigValueOne))
.ForMember(dest => dest.DestValueOne, opt => opt.Ignore());
Mapper.CreateMap<SourceClass, DestClass>()
.ForMember(dest => dest.DestValueOne, opt => opt.MapFrom(a => a.SrcValueOne))
.ForMember(dest => dest.ValueFromConfig, opt => opt.Ignore());
var dest = Mapper.Map(config);
Mapper.Map(source, dest);
如果您不想引入另一个类,这是最简单的选项。
添加新类可以帮助将其封装到只有一个Map调用:
public class ComplexSource
{
public ConfigSettings Config{get;set;}
public SourceClass SourceData{get;set;}
}
Mapper.CreateMap<ComplexSource, DestClass>()....