Я использую AutoMapper 6 (AutoMapper.Extensions.Microsoft.DependencyInjection) для сопоставления данных и моделей представления в основном веб-приложении API. Net. У меня есть свойство age для модели представления и использую настраиваемый преобразователь для вычисления возраста в соответствии сдата рождения происходит из модели данных.
Вот как я добавляю AutoMapper в StartupClass:
services.AddAutoMapper(config => config.AddProfile(new AutoMapperProfiles()));
И это класс профиля AutoMapper:
public class AutoMapperProfiles : Profile
{
public AutoMapperProfiles()
{
CreateMap<User, UserDetailDTO>()
.ForMember(dest => dest.PhotoUrl, opt =>
{
opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
})
.ForMember(dest => dest.Age, opt =>
{
opt.MapFrom<AgeResolverForUserDetail>();
});
CreateMap<User, UserListDTO>()
.ForMember(dest => dest.PhotoUrl, opt =>
{
opt.MapFrom(src => src.Photos.FirstOrDefault(p => p.IsMain).Url);
})
.ForMember(dest => dest.Age, opt =>
{
opt.MapFrom<AgeResolverForUserList>();
});
CreateMap<Photo, PhotoDTO>();
}
}
И этоAgeResolverForUserDetail:
public class AgeResolverForUserDetail : IValueResolver<User, UserDetailDTO, int>
{
public int Resolve(User source, UserDetailDTO destination, int destMember, ResolutionContext context)
{
return source.BirthDate.CalculateAge();
}
}
Когда я запускаю свое приложение и пытаюсь получить сведения о пользователе, объекты сопоставления выдают исключение:
При обработке запроса возникло необработанное исключение.AutoMapperMappingException: не удается создать экземпляр типа DatingApp.Utility.AutoMapperUtilities.AgeResolverForUserDetail AutoMapper.MappingOperationOptions.CreateInstance () в MappingOperationOptions.cs, строка 47 AutoMapperMappingException: типы сопоставления ошибок.Типы сопоставления: Пользователь -> UserDetailDTO DatingApp.Models.DataModels.User -> DatingApp.Models.ViewModels.UserDetailDTO Тип Конфигурация карты Тип: Пользователь -> UserDetailDTO DatingApp.Models.DataModels.User -> DatingApp.Models.ViewModels.UserDetailD DesttailTOTOВозраст
Можете ли вы дать мне решение для этого?
спасибо