Как предоставить дополнительный параметр для метода Map Mapper? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь отобразить один список в другой, но не все, что я хочу, находится в исходном объекте. Позвольте мне объяснить:

Это мои два объекта:

public class SourceItem
{
    public int Id { get; set;}
    public string Name { get; set;}
}

public class TargetItem
{
    public int TargetId { get; set;}
    public string TargetName { get; set;}
    public int Foo { get; set; }
}

Вот как я настраиваю свой Mapper:

public class MyProfile : Profile
{
    public MyProfile()
    {
        CreateMap<SourceItem, TargetItem>()
            .ForMember(dest => dest.TargetId, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.TargetName, opt => opt.MapFrom(src => src.Name));
    }
}

Когда я делаю это ...

var targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems);    

... объекты списка targets будут иметь Foo равным 0. Очевидно. Я пытаюсь также инициализировать Foo (с параметром). Как это:

fooParameter = 321;

List<TargetItem> targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems);
foreach(var target in targets)
{
    target.Foo = fooParameter;
}

Возможно ли это сделать с помощью Mapper?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Вы не можете делать именно то, что вам нужно, но вы можете быть довольно близко, указав параметры отображения при вызове Map.

fooParameter = 321;

var targets = Mapper.Map<List<SourceItem>, List<TargetItem>>(sourceItems, opt =>
            opt.AfterMap(
                (src, dest) => {
                    foreach (var d in dest)
                    {
                        d.Foo = fooParameter;
                    }
                })
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...