我知道我们可以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
));
我认为是代码味道。我想做的是以某种方式将时区传递给嵌套映射。我很感激任何指向这个方向的指示。