不支持使用AutoMapper映射.net 5



我有一个配置文件映射文件

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.csConfigureServices中注册

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));

相关内容

  • 没有找到相关文章

最新更新