所以这是我的第一个Stack Overflow问题,希望我能做好足够的细节以寻求帮助。我正在尝试将AutoMappper与具有依赖项注入功能的dotnet 3.1一起使用,但是它似乎并没有像说的那样注册我的地图。
我收到的错误:
AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.
Mapping types:
User -> UserCustomerDto
在我的Startup.cs中,我在services.AddAutoMapper(typeof(Startup));
区域内有IServiceCollection
我创建了我的User
模型和各种DTO模型。
这里是我拥有的一个示例Profile模型:
public class UserCustomerProfile : Profile
{
public UserCustomerProfile()
{
CreateMap<User, UserCustomerDto>();
CreateMap<UserCustomerDto, User>();
}
}
我的DTO模型具有我的用户模型所具有的所有字段减去一些字段,我不想在用户界面上看到的那些字段。
文档很难理解,因为有非依赖性注入的示例以及9.0之前的版本,在项目启动期间需要进行配置。
我也尝试在.ReverseMap()
上使用CreateMap()
,但那也不起作用。
我正在注入正在使用的服务内部:
private readonly IMapper _mapper;
public UserService(IMapper mapper)
{
_mapper = mapper;
}
并且将错误吐出的地方是该服务内部,其代码如下:_mapper.Map<UserCustomerDto>(user)
我对dotnet core和C#还是相当陌生,因此,任何帮助将不胜感激!谢谢,我希望这能为我提供正确的指导。
UPDATE:将Profile模型与Startup移至同一项目时,一切正常。现在,我只需要知道如何添加对包含我的Profile模型的其他项目的引用。也许我不能?将其保留在我的其他模型所在的我的Models项目中会很好。
我认为您尚未将自动映射器配置文件注册到服务容器中。
dotnet核心的设置在这里
https://docs.automapper.org/en/stable/Dependency-injection.html#asp-net-core
如果为dotnet核心添加名为AutoMapper.Extensions.Microsoft.DependencyInjection
的额外的nuget包,并且您的配置文件位于同一项目中,则可以在启动时添加此代码
services.AddAutoMapper(Assembly.GetExecutingAssembly());
它将搜索所有配置文件并将它们注册到服务列表中。