我需要为AfterMap
设置AutoMapper
,但我没有使用通用版本,因为我在运行时根据需要创建了地图。如果我使用通用版本,我会这样做:
Mapper.CreateMap<DALEntity, BLLEntity>()
.AfterMap((DALEntity dalEntity, BLLEntity bllEntity) =>
(bllEntity as DomainEntityBase).State = DomainEntityState.Unchanged);
工作正常。其他我直到运行时才知道的地图我是这样创建的:
Type BLLClassType = Type.GetType(BLLClassName);
Type DALClassType = Type.GetType(DALClassName);
Mapper.CreateMap(DALClassType, BLLClassType);
但现在我无法设置AfterMap
。有什么建议?我只需要在AutoMapper完成它之后设置State
的{{1}}属性。
答案 0 :(得分:3)
创建自定义值解析器:
public class StateResolver : IValueResolver
{
public ResolutionResult Resolve(ResolutionResult source)
{
return source.New(DomainEntityState.Unchanged);
}
}
用法:
Type BLLClassType = Type.GetType(BLLClassName);
Type DALClassType = Type.GetType(DALClassName);
Mapper.CreateMap(DALClassType, BLLClassType)
.ForMember("State", opt => opt.ResolveUsing<StateResolver>());
答案 1 :(得分:0)
是否必须是AfterMap
?例如,您可以像这样使用UseValue
:
Mapper.CreateMap<DALEntity, BLLEntity>()
.ForMember(dest => dest.State,
opt => opt.UseValue(DomainEntityState.Unchanged));