@@ -204,13 +204,11 @@ protected override Expression VisitNew(NewExpression node)
204204 }
205205 }
206206
207- private List < MemberBinding > CreateMemberBindings ( ExpressionRequest request ,
208- TypeMap typeMap ,
209- Expression instanceParameter , TypePairCount typePairCount , LetPropertyMaps letPropertyMaps )
207+ private List < MemberBinding > CreateMemberBindings ( ExpressionRequest request , TypeMap typeMap , Expression instanceParameter , TypePairCount typePairCount , LetPropertyMaps letPropertyMaps )
210208 {
211209 var bindings = new List < MemberBinding > ( ) ;
212-
213- foreach ( var propertyMap in typeMap . GetPropertyMaps ( ) . Where ( pm => pm . CanResolveValue ( ) && ReflectionHelper . CanBeSet ( pm . DestinationProperty ) ) )
210+ foreach ( var propertyMap in typeMap . GetPropertyMaps ( ) . Where ( pm =>
211+ ( ! pm . ExplicitExpansion || request . MembersToExpand . Contains ( pm . DestinationProperty ) ) && pm . CanResolveValue ( ) && ReflectionHelper . CanBeSet ( pm . DestinationProperty ) ) )
214212 {
215213 letPropertyMaps . Push ( propertyMap ) ;
216214
@@ -222,44 +220,33 @@ private List<MemberBinding> CreateMemberBindings(ExpressionRequest request,
222220 void CreateMemberBinding ( PropertyMap propertyMap )
223221 {
224222 var result = ResolveExpression ( propertyMap , request . SourceType , instanceParameter , letPropertyMaps ) ;
225-
226- if ( propertyMap . ExplicitExpansion && ! request . MembersToExpand . Contains ( propertyMap . DestinationProperty ) )
223+ var propertyTypeMap = _configurationProvider . ResolveTypeMap ( result . Type , propertyMap . DestinationPropertyType ) ;
224+ var propertyRequest = new ExpressionRequest ( result . Type , propertyMap . DestinationPropertyType , request . MembersToExpand , request ) ;
225+ if ( propertyRequest . AlreadyExists )
227226 {
228227 return ;
229228 }
230- var propertyTypeMap = _configurationProvider . ResolveTypeMap ( result . Type ,
231- propertyMap . DestinationPropertyType ) ;
232- var propertyRequest = new ExpressionRequest ( result . Type , propertyMap . DestinationPropertyType , request . MembersToExpand , request ) ;
233-
234- if ( ! propertyRequest . AlreadyExists )
229+ var binder = Binders . FirstOrDefault ( b => b . IsMatch ( propertyMap , propertyTypeMap , result ) ) ;
230+ if ( binder == null )
235231 {
236- var binder = Binders . FirstOrDefault ( b => b . IsMatch ( propertyMap , propertyTypeMap , result ) ) ;
237-
238- if ( binder == null )
239- {
240- var message =
241- $ "Unable to create a map expression from { propertyMap . SourceMember ? . DeclaringType ? . Name } .{ propertyMap . SourceMember ? . Name } ({ result . Type } ) to { propertyMap . DestinationProperty . DeclaringType ? . Name } .{ propertyMap . DestinationProperty . Name } ({ propertyMap . DestinationPropertyType } )";
242-
243- throw new AutoMapperMappingException ( message , null , typeMap . Types , typeMap , propertyMap ) ;
244- }
245-
246- var bindExpression = binder . Build ( _configurationProvider , propertyMap , propertyTypeMap ,
247- propertyRequest , result , typePairCount , letPropertyMaps ) ;
248-
249-
250- if ( bindExpression != null )
251- {
252- var rhs = propertyMap . ValueTransformers
253- . Concat ( typeMap . ValueTransformers )
254- . Concat ( typeMap . Profile . ValueTransformers )
255- . Where ( vt => vt . IsMatch ( propertyMap ) )
256- . Aggregate ( bindExpression . Expression , ( current , vtConfig ) => ToType ( ReplaceParameters ( vtConfig . TransformerExpression , ToType ( current , vtConfig . ValueType ) ) , propertyMap . DestinationPropertyType ) ) ;
232+ var message =
233+ $ "Unable to create a map expression from { propertyMap . SourceMember ? . DeclaringType ? . Name } .{ propertyMap . SourceMember ? . Name } ({ result . Type } ) to { propertyMap . DestinationProperty . DeclaringType ? . Name } .{ propertyMap . DestinationProperty . Name } ({ propertyMap . DestinationPropertyType } )";
234+ throw new AutoMapperMappingException ( message , null , typeMap . Types , typeMap , propertyMap ) ;
235+ }
236+ var bindExpression = binder . Build ( _configurationProvider , propertyMap , propertyTypeMap , propertyRequest , result , typePairCount , letPropertyMaps ) ;
237+ if ( bindExpression == null )
238+ {
239+ return ;
240+ }
241+ var rhs = propertyMap . ValueTransformers
242+ . Concat ( typeMap . ValueTransformers )
243+ . Concat ( typeMap . Profile . ValueTransformers )
244+ . Where ( vt => vt . IsMatch ( propertyMap ) )
245+ . Aggregate ( bindExpression . Expression , ( current , vtConfig ) => ToType ( ReplaceParameters ( vtConfig . TransformerExpression , ToType ( current , vtConfig . ValueType ) ) , propertyMap . DestinationPropertyType ) ) ;
257246
258- bindExpression = bindExpression . Update ( rhs ) ;
247+ bindExpression = bindExpression . Update ( rhs ) ;
259248
260- bindings . Add ( bindExpression ) ;
261- }
262- }
249+ bindings . Add ( bindExpression ) ;
263250 }
264251 }
265252
0 commit comments