Skip to content

Instantly share code, notes, and snippets.

@lbargaoanu
Created November 11, 2018 09:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lbargaoanu/dd769ffcdbca263024c19d0ae1ebd3ad to your computer and use it in GitHub Desktop.
Save lbargaoanu/dd769ffcdbca263024c19d0ae1ebd3ad to your computer and use it in GitHub Desktop.
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