如何为 Mapper 的 Map 方法提供附加参数?

Posted

技术标签:

【中文标题】如何为 Mapper 的 Map 方法提供附加参数?【英文标题】:How to provide additional parameter to Mapper's Map method? 【发布时间】:2019-04-04 20:36:54 【问题描述】:

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

这是我的两个对象:

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吗?

提前致谢!

【问题讨论】:

docs.automapper.org/en/latest/… 【参考方案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;
                    
                )
            );

【讨论】:

以上是关于如何为 Mapper 的 Map 方法提供附加参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 gradle 任务命令行参数提供 flyway 密码?

如何为没有附加外部通信方法的帐户创建密码重设系统?

Spring MVC 如何为控制器方法提供可注入

mapper 传多个参数

如何为任意数量的变量运行一种方法[重复]

如何为as2中的方法定义默认参数值?