【问题标题】:How to provide additional parameter to Mapper's Map method?如何为 Mapper 的 Map 方法提供附加参数?
【发布时间】: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吗?

提前致谢!

【问题讨论】:

标签: c# .net mapping automapper mapper


【解决方案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;
                    }
                })
            );

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    相关资源
    最近更新 更多