我有一个配置文件映射文件
public class AutoMapperProfiles : Profile
{
public AutoMapperProfiles()
{
#region MyFunObjects
CreateMap<CreateMyFunObjectDto, MyFunObject>();
CreateMap<MyFunObject, MyFunObjectDetailDto>();
#endregion
}
}
MyFunObject
模型简单:
public class MyFunObject
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
我的dto很简单:
public class CreateMyFunObjectDto
{
[Required]
public string Name { get; set; }
}
public class MyFunObjectDetailDto
{
public int Id { get; set; }
public string Name { get; set; }
}
Automapper在Startup.cs
的ConfigureServices
中注册
services.AddAutoMapper(typeof(Startup));
在我的服务中,这行换行并抛出一个未处理的错误"Unsupported mapping "
MyFunObject myFunObject = _mapper.Map<CreateMyFunObjectDto, MyFunObject >(createMyFunObjectDto);
在另一个方法调用中也会失败。
return _mapper.Map<List<MyFunObjectDetailDto>>(myFunObjectList);
我错过了什么?
堆栈跟踪:
blazor.server.js:19 [2021-01-30T15:26:00.306Z] Error: AutoMapper.AutoMapperMappingException: Error mapping types.
Mapping types:
Object -> List`1
System.Object -> System.Collections.Generic.List`1[[Ruak_Models.DTOs.StatusDtos.StatusDetailDto, Ruak_Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
---> AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types:
Status -> StatusDetailDto
Ruak_Data.Models.Status -> Ruak_Models.DTOs.StatusDtos.StatusDetailDto
at lambda_method90(Closure , Status , StatusDetailDto , ResolutionContext )
at lambda_method89(Closure , Object , List`1 , ResolutionContext )
--- End of inner exception stack trace ---
at lambda_method89(Closure , Object , List`1 , ResolutionContext )
at Ruak_Business.Services.StatusService.StatusService.GetStatuses() in C:CodeBlazorRuakRuakBlazorRuakRuak_BusinessServicesStatusServiceStatusService.cs:line 53
at Ruak_Server.Pages.Objectives.ObjectiveList.OnInitializedAsync() in C:CodeBlazorRuakRuakBlazorRuakRuak_ServerPagesObjectivesObjectiveList.razor.cs:line 28
at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
AutoMapper
找不到您在AutoMapperProfiles
类中定义/配置的映射。最可能的原因是配置文件类与包含Startup
类的程序集不同。
如果是这种情况,那么您可以在程序集中创建包含AutoMapperProfiles
类的标记接口-
public interface IMappingProfile
{
//
}
它的唯一目的是标记/识别包含映射的程序集。
将AutoMapper
注册为-
services.AddAutoMapper(typeof(IMappingProfile));
编辑:
使用标记接口只是我的个人偏好,因为我倾向于为我的领域模型创建单独的配置文件类。因此,您可以简单地省略接口,并使用配置文件类类型注册为-
services.AddAutoMapper(typeof(AutoMapperProfiles));