我有初始化映射器配置文件的单例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);
没关系
答案 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版本中实现,目前处于测试阶段)。