Automapper 8 использует параметр в качестве условия карты
В настоящее время я использую Automapper 8.0 и пытаюсь передать параметр мапперу в качестве условия для карты.
Я сопоставляю два объекта, которые содержат IEnumerable другого объекта. Например...
public class Source {
public IEnumerable<SourceIE> value {get; set;}
}
public class SourceIE
{
public long Id { get; set; }
public string Name { get; set; }
public number Rating { get; set; }
}
public class Destination {
public <IEnumerable>DestinationIE value {get; set;}
}
public class DestinationIE
{
public long ID { get; set; }
public string Name { get; set; }
public number Rating { get; set; }
}
Я настроил автомаппер для моего корневого объекта, чтобы он игнорировал мой поддокумент, а затем создал новый сопоставитель для моих поддокументов, который я называю так:
var mapped = _mapper.Map<IEnumerable<Destination>>
(data, opt => opt.Items.Add("ShowStarRating", false));
и внутри маппера я пытаюсь установить условие, чтобы рейтинг отображался только в том случае, если ShowStarRating = true.
.ForMember(dest => dest.Rating, opt =>
{
opt.Condition(context=>
{
return (bool)context.Options.Items["ShowStarRating"];
}
);
opt.MapFrom(src => src.Rating);
}
);
Эта проблема у меня заключается в том, что параметры не распознаются, и при наведении указывается, что "источник" не содержит определения "параметры" и не доступен метод расширения.
Я не могу понять на всю жизнь, как получить доступ к переданным в Options.Items значениям из условия. Кажется, есть тонна информации о том, как это сделать в Automapper 5 или ниже, но ничего для 8.
1 ответ
После множества проб и ошибок я смог понять это. Оказывается, контекст был 4-м пунктом в условиях, поэтому мне просто нужно было добраться до него, прежде чем я смог прочитать его.
.ForMember(dest => dest.Rating,
opt => opt.Condition(
(src, dest, x, y, context) => context.Options.Items["ShowStarRating"] == "true"
)
);