AutoMapper。缺少类型地图配置

时间:2016-06-23 09:45:45

标签: automapper

我有初始化映射器配置文件的单例EntityMapper类。

    private readonly IMapper _mapper;
    private static EntityMapper _instance;
    public static EntityMapper Instance => _instance ?? (_instance = new EntityMapper());
    private EntityMapper()
    {
        var config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new ViewColumnMapperProfile());
        });
        _mapper = config.CreateMapper();
    }

在基础个人资料类:

public class BaseMapperProfile<TSorce, TTarget> : Profile
{
    protected override void Configure()
    {
        CreateMap<List<TSorce>, IdentityList>()
            .ForCtorParam("identities", opt => opt.MapFrom(src => Mapper.Map<Identity>(src)));
        CreateMap<IdentityList, List<TSorce>>()
            .ConstructUsing(scr => new List<TSorce>(scr.Select(Mapper.Map<TSorce>)));
    }
}

儿童班:

public class ViewColumnMapperProfile : BaseMapperProfile<AP_ViewColumn, ColumnInfo>
{
    protected override void Configure()
    {
        CreateMap<AP_ViewColumn, ColumnInfo>()
            .ForMember(...)
        CreateMap<ColumnInfo, AP_ViewColumn>()
            .ForMember(...)

        CreateMap<AP_ViewColumn, Identity>()
            .ForMember(...)
        CreateMap<Identity, AP_ViewColumn>()
            .ForMember(...);

        base.Configure();
    }
}

然后我使用映射:

    var res = EntityMapper.Map<List<AP_ViewColumn>>(identityList);

此代码抛出异常:缺少类型mao配置或不支持的mappig。

映射类型:   身份 - &gt; AP_ViewColumn

但是当我使用时:

Mapper.Initialize(cfg => cfg.AddProfile(new ViewColumnMapperProfile())); 
var res = EntityMapper.Map<List<AP_ViewColumn>>(identityList);

没关系

1 个答案:

答案 0 :(得分:0)

你已经有了问题的答案。

当您使用var res = EntityMapper.Map<List<AP_ViewColumn>>(identityList);时,您使用自己的包装器来配置和使用Mapper类的实例

但是,在BaseMapperProfile内,您可以调用静态方法Mapper.Map<Identity>(src)

但在EntityMapper内,您仅为Mapper实例配置/提供了所有映射,不是 static Mapper。< / p>

要解决此问题,您需要按static Mapper方法配置Mapper.Initialize

目前,我没有找到如何在那里传递mapper实例的方法(我认为它将在5.0版本中实现,目前处于测试阶段)。