3

我有以下两个基本视图模型类,我所有的视图模型(曾经)都来自:

public class MappedViewModel<TEntity>: ViewModel
{
    public virtual void MapFromEntity(TEntity entity)
    {
        Mapper.Map(entity, this, typeof (TEntity), GetType());
    }
}

public class IndexModel<TIndexItem, TEntity> : ViewModel
    where TIndexItem : MappedViewModel<TEntity>, new()
    where TEntity : new()
{
    public List<TIndexItem> Items { get; set; }
    public virtual void MapFromEntityList(IEnumerable<TEntity> entityList)
    {
        Items = Mapper.Map<IEnumerable<TEntity>, List<TIndexItem>>(entityList);
    }
}

在我知道 AutoMapper 可以自己做所有列表之前,就像上面的一样MapFromEntityList,我曾经运行一个循环并为每个列表项调用MapFromEntity一个新实例。MappedViewModel

现在我失去了重写的机会,只是MapFromEntity因为 AutoMapper 不使用它,而且我还必须重写MapFromEntityList回显式循环来实现这一点。

在我的应用启动中,我使用如下映射配置:

Mapper.CreateMap<ClientCourse, ClientCourseIndexItem>();

我如何告诉 AutoMapper 总是调用MapFromEntity例如 every ClientCourseIndexIte?或者,有没有更好的方法来完成这一切?

顺便说一句,我仍然经常MapFromEntity在编辑模型中使用显式调用,而不是索引模型。

4

1 回答 1

2

您可以实现一个调用 MapFromEntity 方法的转换器。这是示例:

public class ClientCourseConverter<TSource, TDestination>: ITypeConverter<TSource, TDestination>
       where TSource :  new()
       where TDestination : MappedViewModel<TEntity>, new()
{
    public TDestination Convert(ResolutionContext context)
    {
        var destination = (TDestination)context.DestinationValue;
        if(destination == null)
            destination = new TDestination();
        destination.MapFromEntity((TSource)context.SourceValue);
    }
}

// Mapping configuration
Mapper.CreateMap<ClientCourse, ClientCourseIndexItem>().ConvertUsing(
 new ClientCourseConverter<ClientCourse, ClientCourseIndexItem>());
于 2012-07-10T18:56:09.233 回答