Automapper 8 использует параметр в качестве условия карты - PullRequest
0 голосов
/ 13 марта 2019

В настоящее время я использую 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 Ответ

0 голосов
/ 14 марта 2019

После множества проб и ошибок я смог понять это. Оказывается, контекст был 4-м пунктом в условиях, поэтому мне просто нужно было добраться до него, прежде чем я смог прочитать его.

.ForMember(dest => dest.Rating, 
    opt => opt.Condition(
        (src, dest, x, y, context) => context.Options.Items["ShowStarRating"] == "true"
    )
);                
...