如何为Mapper的Map方法提供其他参数?

时间:2018-10-31 15:52:24

标签: c# .net mapping automapper mapper

我正在尝试将一个列表映射到另一个列表,但并不是我想要的所有内容都在源对象中。让我解释一下:

这是我的两个对象:

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 :(得分:-1)

您不能完全按照自己的意愿进行操作,但是可以通过在调用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;
                    }
                })
            );