我遵循了官方文档,说明了 Automapper 9.0 从静态 API 的转变,但我仍然无法使其在我的 c# dotnet core App 中工作。我得到以下异常:
“AutoMapperMappingException:我的控制器类中缺少类型映射配置或不支持的映射”。
你能告诉我关于 Automapper 9.0 的配置步骤吗?
这是我执行的步骤:
启动.cs
var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new MyMapperProfile());
});
IMapper mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
MyMapperProfile 类
CreateMap<MasterData.Models.SupplierMaterial, SupplierMaterial>().
ForMember(dto => dto.TechnicalDrawings, conf => conf.MapFrom(ol =>
ol.TechnicalDrawings.Select(v => v.Id)));
CreateMap<MasterData.Models.WarehouseUbication, WarehouseUbication>().
ForMember(dto => dto.MaterialCode, conf => conf.MapFrom(ol => ol.Material.Code));
CreateMap<MasterData.Models.TechnicalDrawing, TechnicalDrawing>().
ForMember(dto => dto.MaterialCode, conf => conf.MapFrom(ol => ol.Materials.Select(v => v.Code)))
.ForMember(dto => dto.SupplierMaterialCode, conf => conf.MapFrom(ol => ol.SupplierMaterials.Select(v => v.Code)));
CreateMap<MasterData.Models.MaterialDocument, MaterialDocument>().
ForMember(dto => dto.Materials, conf => conf.MapFrom(ol => ol.Materials.Select(v => v.Code)));
CreateMap<MasterData.Models.Material, Material>().
ForMember(dto => dto.WarehouseUbications, conf => conf.MapFrom(ol => ol.WarehouseUbications.Select(v => v.Code)))
.ForMember(dto => dto.SupplierMaterials, conf => conf.MapFrom(ol => ol.SupplierMaterials.Select(v => v.Code)))
.ForMember(dto => dto.TechnicalDrawingID, conf => conf.MapFrom(ol => ol.TechnicalDrawing.Id))
.ForMember(dto => dto.MaterialDocuments, conf => conf.MapFrom(ol => ol.MaterialDocuments.Select(v => v.Materials)));
//var mapper = config.CreateMapper();
}
}
}
控制器类
public MaterialController(IMasterDataService masterService, IMapper mapper)
{
this.masterDataService = masterService;
_mapper = mapper;
}
//[route]
public List<Material> getAllMaterials()
{
List<Material> materialsList = new List<Material>();
foreach (MasterData.Models.Material m in masterDataService.GetMaterials())
{
_mapper.Map<IEnumerable<Contracts.Material>>(m);
}
return materialsList;
}