Я использую:
- Автокартограф 6.1.1
- AutoMapper.Extensions.Microsoft.DependencyInjection 3.0.1
Кажется, мои профили не загружаются, каждый раз, когда я вызываю mapper.map, я получаю AutoMapper.AutoMapperMappingException: «Отсутствует конфигурация карты типов или неподдерживаемое сопоставление».
Здесь мой метод ConfigureServices класса Startup.cs
// 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
Для моих классов профиля, если вместо наследования от профиля я наследую от 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. Как я могу это сделать?