Skip to content

Commit a5a83bc

Browse files
committed
make MemberMap.DestinationType a regular property, with storage
1 parent b4331bb commit a5a83bc

File tree

4 files changed

+12
-16
lines changed

4 files changed

+12
-16
lines changed

src/AutoMapper/ConstructorMap.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,13 @@ public bool ApplyMap(TypeMap typeMap, IncludedMember includedMember = null)
6767
[EditorBrowsable(EditorBrowsableState.Never)]
6868
public class ConstructorParameterMap : MemberMap
6969
{
70-
public ConstructorParameterMap(TypeMap typeMap, ParameterInfo parameter, MemberInfo[] sourceMembers) : base(typeMap)
70+
public ConstructorParameterMap(TypeMap typeMap, ParameterInfo parameter, MemberInfo[] sourceMembers) : base(typeMap, parameter.ParameterType)
7171
{
7272
Parameter = parameter;
73-
var parameterType = parameter.ParameterType;
74-
DestinationType = parameterType.IsByRef ? parameterType.GetElementType() : parameterType;
73+
if(DestinationType.IsByRef)
74+
{
75+
DestinationType = DestinationType.GetElementType();
76+
}
7577
if (sourceMembers.Length > 0)
7678
{
7779
MapByConvention(sourceMembers);
@@ -82,7 +84,6 @@ public ConstructorParameterMap(TypeMap typeMap, ParameterInfo parameter, MemberI
8284
}
8385
}
8486
public ParameterInfo Parameter { get; }
85-
public override Type DestinationType { get; protected set; }
8687
public override IncludedMember IncludedMember { get; protected set; }
8788
public override MemberInfo[] SourceMembers { get; set; }
8889
public override string DestinationName => Parameter.Name;

src/AutoMapper/MemberMap.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ namespace AutoMapper;
66
public class MemberMap : IValueResolver
77
{
88
private protected Type _sourceType;
9-
protected MemberMap(TypeMap typeMap) => TypeMap = typeMap;
10-
internal static readonly MemberMap Instance = new(null);
9+
protected MemberMap(TypeMap typeMap, Type destinationType) => (TypeMap, DestinationType) = (typeMap, destinationType);
10+
internal static readonly MemberMap Instance = new(null, null);
1111
public TypeMap TypeMap { get; protected set; }
1212
public LambdaExpression CustomMapExpression => Resolver?.ProjectToExpression;
1313
public bool IsResolveConfigured => Resolver != null && Resolver != this;
@@ -22,7 +22,7 @@ public void SetResolver(IValueResolver resolver)
2222
public virtual MemberInfo[] SourceMembers { get => []; set { } }
2323
public virtual IncludedMember IncludedMember { get => default; protected set { } }
2424
public virtual string DestinationName => default;
25-
public virtual Type DestinationType { get => default; protected set { } }
25+
public Type DestinationType { get; protected set; }
2626
public virtual TypePair Types() => new(SourceType, DestinationType);
2727
public bool CanResolveValue => !Ignored && Resolver != null;
2828
public bool IsMapped => Ignored || Resolver != null;

src/AutoMapper/PathMap.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
namespace AutoMapper;
22
[DebuggerDisplay("{DestinationExpression}")]
33
[EditorBrowsable(EditorBrowsableState.Never)]
4-
public sealed class PathMap(LambdaExpression destinationExpression, MemberPath memberPath, TypeMap typeMap) : MemberMap(typeMap)
4+
public sealed class PathMap(LambdaExpression destinationExpression, MemberPath memberPath, TypeMap typeMap)
5+
: MemberMap(typeMap, memberPath.Last.GetMemberType())
56
{
67
public PathMap(PathMap pathMap, TypeMap typeMap, IncludedMember includedMember) : this(pathMap.DestinationExpression, pathMap.MemberPath, typeMap)
78
{
@@ -13,7 +14,6 @@ public PathMap(PathMap pathMap, TypeMap typeMap, IncludedMember includedMember)
1314
public override Type SourceType => Resolver.ResolvedType;
1415
public LambdaExpression DestinationExpression { get; } = destinationExpression;
1516
public MemberPath MemberPath { get; } = memberPath;
16-
public override Type DestinationType => MemberPath.Last.GetMemberType();
1717
public override string DestinationName => MemberPath.ToString();
1818
public override bool CanBeSet => ReflectionHelper.CanBeSet(MemberPath.Last);
1919
public override bool Ignored { get; set; }

src/AutoMapper/PropertyMap.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,15 @@ namespace AutoMapper;
55
public sealed class PropertyMap : MemberMap
66
{
77
private MemberMapDetails _details;
8-
public PropertyMap(MemberInfo destinationMember, Type destinationMemberType, TypeMap typeMap) : base(typeMap)
9-
{
8+
public PropertyMap(MemberInfo destinationMember, Type destinationMemberType, TypeMap typeMap) : base(typeMap, destinationMemberType) =>
109
DestinationMember = destinationMember;
11-
DestinationType = destinationMemberType;
12-
}
13-
public PropertyMap(PropertyMap inheritedMappedProperty, TypeMap typeMap) : base(typeMap)
10+
public PropertyMap(PropertyMap inheritedMappedProperty, TypeMap typeMap) : base(typeMap, inheritedMappedProperty.DestinationType)
1411
{
1512
DestinationMember = inheritedMappedProperty.DestinationMember;
1613
if (DestinationMember.DeclaringType.ContainsGenericParameters)
1714
{
1815
DestinationMember = typeMap.DestinationSetters.Single(m => m.Name == DestinationMember.Name);
1916
}
20-
DestinationType = inheritedMappedProperty.DestinationType;
2117
if (DestinationType.ContainsGenericParameters)
2218
{
2319
DestinationType = DestinationMember.GetMemberType();
@@ -29,7 +25,6 @@ public PropertyMap(PropertyMap includedMemberMap, TypeMap typeMap, IncludedMembe
2925
private MemberMapDetails Details => _details ??= new();
3026
public MemberInfo DestinationMember { get; }
3127
public override string DestinationName => DestinationMember?.Name;
32-
public override Type DestinationType { get; protected set; }
3328
public override MemberInfo[] SourceMembers { get; set; } = [];
3429
public override bool CanBeSet => DestinationMember.CanBeSet();
3530
public override bool Ignored { get; set; }

0 commit comments

Comments
 (0)