Created
November 11, 2018 09:49
-
-
Save lbargaoanu/dd769ffcdbca263024c19d0ae1ebd3ad to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void Main() | |
{ | |
Mapper.Initialize(cfg => | |
{ | |
cfg.CreateMap<Source, Destination>().ForMember(dest => dest.ValuesCount, opt => opt.MapFrom(s=>s.Value1+s.Value2)); | |
cfg.CreateMap<SourceItem, DestItem>(); | |
}); | |
Mapper.AssertConfigurationIsValid(); | |
//Mapper.Configuration.BuildExecutionPlan(typeof(Source), typeof(Destination)).ToReadableString().Dump(); | |
var expression = Mapper.Configuration.ResolveTypeMap(typeof(Source), typeof(Destination)).PropertyMaps.Last().CustomMapExpression; | |
MemberVisitor.GetMembers(expression).Dump(); | |
var source = new Source { Values = new List<SourceItem> { new SourceItem { Value = 5 }, new SourceItem { Value = 10 } }, Value1 = 3, Value2 = 3 }; | |
//Mapper.Map<Destination>(source).Dump(); | |
Mapper.Map<DestItem[]>(source.Values).Dump(); | |
} | |
public class SourceItem | |
{ | |
public int Value { get; set; } | |
} | |
public class DestItem | |
{ | |
public int Value { get; set; } | |
} | |
public class Source | |
{ | |
public IList<SourceItem> Values { get; set; } | |
public int Value1 { get; set; } | |
public int Value2 { get; set; } | |
} | |
public class Destination | |
{ | |
public IList<DestItem> Values { get; set; } | |
public int ValuesCount { get; set; } | |
} | |
class MemberVisitor : ExpressionVisitor | |
{ | |
private List<MemberInfo> _members = new List<MemberInfo>(); | |
public static IReadOnlyCollection<MemberInfo> GetMembers(Expression expression) | |
{ | |
var visitor = new MemberVisitor(); | |
visitor.Visit(expression); | |
return visitor._members; | |
} | |
protected override Expression VisitMember(MemberExpression memberExpression) | |
{ | |
_members.Add(memberExpression.Member); | |
return base.VisitMember(memberExpression); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment