我正在使用:
- AutoMapper 6.1.1
- AutoMapper.Extensions.Microsoft.DependencyInjection 3.0.1
似乎我的配置文件没有被加载,每次调用mapper.map时,都会出现AutoMapper.AutoMapperMappingException: 'Missing type map configuration or unsupported mapping.'
下面是我的Startup.cs类ConfigureServices方法:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//register automapper
services.AddAutoMapper();
.
.
}
在另一个名为xxxMappings的项目中,我有我的映射配置文件。例如类。
public class StatusMappingProfile : Profile
{
public StatusMappingProfile()
{
CreateMap<Status, StatusDTO>()
.ForMember(t => t.Id, s => s.MapFrom(d => d.Id))
.ForMember(t => t.Title, s => s.MapFrom(d => d.Name))
.ForMember(t => t.Color, s => s.MapFrom(d => d.Color));
}
public override string ProfileName
{
get { return this.GetType().Name; }
}
}
在服务类中这样调用地图
public StatusDTO GetById(int statusId)
{
var status = statusRepository.GetById(statusId);
return mapper.Map<Status, StatusDTO>(status); //map exception here
}
在调用statusRepository.GetById后,status将具有值。
对于我的Profile类,如果我不是继承自Profile而是继承自MapperConfigurationExpression,则会得到一个单元测试,如下所示,表示映射良好。
[Fact]
public void TestStatusMapping()
{
var mappingProfile = new StatusMappingProfile();
var config = new MapperConfiguration(mappingProfile);
var mapper = new AutoMapper.Mapper(config);
(mapper as IMapper).ConfigurationProvider.AssertConfigurationIsValid();
}
我的猜测是我的映射没有被初始化。我该如何检查?我有什么遗漏吗? 我看到了AddAutoMapper()方法的重载。
services.AddAutoMapper(params Assembly[] assemblies)
我应该传递我的xxxMappings项目中的所有程序集。我该怎么做?