Создать конфигурацию автомпера с помощью дерева выражений - PullRequest
0 голосов
/ 19 марта 2020

У меня небольшая проблема: я использую автомапер и создаю карты из дерева выражений или отражений, но не добился успеха, я объясню проблему.

В основном в этом коде я пытаюсь передать дерево выражений независимо от типа свойства, но это исключение возникает в MapFrom:

System.ArgumentOutOfRangeException: 'Разрешен только доступ к элементам. dest => Convert (dest.Shipping.Method, Object) '

Существует ли обходной путь для этого?

 var peDestination = Expression.Parameter(destination.GetType(), "dest");
   var peSource = Expression.Parameter(source.GetType(), "src");

    if (propertyMap.Destination.IndexOf('.') >= 0)
    {
         Expression destinationExpression = peDestination;
         foreach (var navigatinoPropertieDestination in propertyMap.Destination.Split('.'))
               destinationExpression = Expression.Property(destinationExpression,navigatinoPropertieDestination);

          var sourceExpression = Expression.Property(peSource, propertyMap.Source);

var sourceMapFromExpression = Expression.Lambda<Func<TSource, object>>(                                
  Expression.Convert(sourceExpression, typeof(object)), new ParameterExpression[] { peSource });

     //// dest => dest.Property
    var destinationMapFromExpression =
                            Expression.Lambda<Func<TDestination, object>>
                                (Expression.Convert(destinationExpression, typeof(object)), new ParameterExpression[] { peDestination });

map.ForPath(destinationMapFromExpression, a => a.MapFrom(sourceMapFromExpression));
}

...