没有泛型的AutoMapper AfterMap

时间:2012-12-17 17:06:03

标签: c# generics automapper

我需要为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}}属性。

2 个答案:

答案 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));