У меня есть два класса:
public class QuizDto
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string UserToken { get; set; }
public List<int> AreasId { get; set; }
public List<QuizQuestionDto> Questions { get; set; }
}
public class Quiz
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string UserToken { get; set; }
public List<JoinQuizAndArea> AreasOfQuizzes { get; set; }
public List<QuizQuestion> Questions { get; set; }
}
public class JoinQuizAndArea
{
public int QuizId { get; set; }
public Quiz Quiz { get; set; }
public int AreaId { get; set; }
public AreaOfQuiz Area { get; set; }
}
public class AreaOfQuiz
{
public int Id { get; set; }
public string Area { get; set; }
public List<JoinQuizAndArea> AreasOfQuizzes { get; set; }
}
Мне нужно сопоставить QuizDto с Quiz, для этого мне нужно сопоставить эти два свойства:
public class QuizDto
{
public int Id { get; set; }
...
...
public List<int> AreasId { get; set; }
...
}
с этими двумя свойствами:
public class JoinQuizAndArea
{
public int QuizId { get; set; }
...
public int AreaId { get; set; }
....
}
Чтобы сделать это, я создал следующий Resolver:
public class CustomResolver : IValueResolver<QuizDto, Quiz, List<JoinQuizAndArea>>
{
public List<JoinQuizAndArea> Resolve(QuizDto source, Quiz destination, List<JoinQuizAndArea> member, ResolutionContext context)
{
var list = new List<JoinQuizAndArea>();
foreach(var areaId in source.AreasId)
{
var joinQuizAndArea = new JoinQuizAndArea();
joinQuizAndArea.AreaId = areaId;
joinQuizAndArea.QuizId = source.Id;
list.Add(joinQuizAndArea);
}
return list;
}
}
interface IValueResolver<in TSource, in TDestination,TDestMember>
{
TDestMember Resolve(TSource source, TDestination destination, TDestMember destMember, ResolutionContext context);
}
Но когда я пытаюсь настроить профиль сопоставления:
public class QuizProfile:Profile
{
public QuizProfile()
{
CreateMap<Quiz, QuizDto>();
CreateMap<QuizDto, Quiz>()
.ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.UserToken, opt => opt.MapFrom(src => src.UserToken))
.ForMember(dest => dest.AreasOfQuizzes, opt=>opt.MapFrom<CustomResolver>())
.ForMember(dest => dest.Questions, opt => opt.MapFrom(src => src.Questions));
}
}
Iполучено сообщение об ошибке:
CS0311 Тип 'QuizzWorld.Mapping.Resolver.CustomResolver' нельзя использовать в качестве параметра типа 'TValueResolver' в универсальном типе или методе 'IMemberConfigurationExpression.MapFrom (). ». Не существует неявного преобразования ссылок из 'QuizzWorld.Mapping.Resolver.CustomResolver' в 'AutoMapper.IValueResolver'. QuizzWorld C: \ Users \ Sohaib \ source \ repos \ QuizzWorld \ Back End \ QuizzWorld Back End \ QuizzWorld \ Mapping \ QuizProfile.cs
плз, у кого-нибудь есть идея, в чем проблемаэто точно ?? Спасибо.