Automapper Project()到IEnumerable和单个对象

时间:2016-12-12 11:26:18

标签: c# mapping automapper automapper-3

我有两个类将与另一个类映射。 MyViewClassMyDomainClass

public class EntityMapProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<MyDomainClass, MyViewClass>();
    }
}

所以我需要一个扩展方法来将域对象映射到视图对象。

public static class MyClassMapper
{
    public static MyViewClass ToView(this MyDomainClass obj)
    {
        return AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(obj);
    }

    public static IEnumerable<MyViewClass> ToView(this IEnumerable<MyDomainClass> obj)
    {
        return AutoMapper.Mapper.Map<IEnumerable<MyDomainClass>, IEnumerable<MyViewClass>>(obj);
    }
}

但我有很多域和视图类。所以我需要创建创建这么多的扩展方法和类。

有没有办法以通用的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

自动播放器已经使用了泛型,所以我没有使用直接映射器而不是扩展的任何问题,例如。

var view = AutoMapper.Mapper.Map<MyDomainClass, MyViewClass>(domain);

但是你可以为IEnumerable映射编写扩展名:

public static IEnumerable<TView> MapEnumerable<TDomainModel, TView>(this IEnumerable<TDomainModel> domainEnumerable)
            where TDomainModel : class
            where TView : class
        {
            return AutoMapper.Mapper.Map<IEnumerable<TDomainModel>, IEnumerable<TView>>(domainEnumerable);
        }

并使用它:

IEnumerable<MyViewClass> views = domainEnumerable.MapEnumerable<MyDomainClass, MyViewClass>();

更新: 单域模型的扩展

public static TView MapDomain<TDomainModel, TView>(this TDomainModel domainModel)
            where TDomainModel : class
            where TView : class
        {
            return AutoMapper.Mapper.Map<TDomainModel, TView>(domainModel);
        }