如何为 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 方法提供附加参数?的主要内容,如果未能解决你的问题,请参考以下文章