每个嵌套映射

时间:2017-07-04 00:37:17

标签: automapper

我知道我们可以set the Context items when we call Map(),它可以用于每个地图操作。有没有办法在映射期间更改这些上下文项?

假设我有这些源类型:

public class OuterSource {
    public string TimeZone { get; set; }
    public string Name { get; set; }
    public InnerSource[] InnerArray { get; set; }
}

public class InnerSource {
    public DateTime Created { get; set; }
    public string Message { get; set; }
}

以及这些目的地类型:

public class OuterDest {
    public string Name { get; set; }
    public InnerDest[] InnerArray { get; set; }
}

public class InnerDest {
    public DateTime Created { get; set; }
    public string Message { get; set; }
}

唯一的区别是InnerSource.Created是UTC,我想将它映射到本地时区。但是时区是在OuterSource中,而不是InnerSource。

通常情况下,我会设置我的映射器:

CreateMap<OuterSource, OuterDest>();
CreateMap<InnerSource, InnerDest>();

但这不起作用,因为在将InnerSource映射到InnerDest时,它无法访问OuterSource.TimeZone

所以我现在被迫设置我的映射:

CreateMap<OuterSource, OuterDest>()
    .ForMember(dest => dest.InnerArray, opt => opt.ResolveUsing(
        //loop through source.InnerArray and do the datetime
        //conversion manually
));

我认为是代码味道。我想做的是以某种方式将时区传递给嵌套映射。我很感激任何指向这个方向的指示。

0 个答案:

没有答案