public Expression <Action <TSource, TDestination> > CompleteMapDataExpression <TSource, TDestination>(Expression <Func <TSource, TDestination> > inputExpression, IFlashMapperMappingCallbacks <TSource, TDestination> callbacks) { var destinationType = typeof(TDestination); var source = inputExpression.Parameters[0]; var destination = Expression.Parameter(destinationType); var userInputParts = userInputParser.GetUserInputParts(inputExpression.Body); var actions = new List <Expression>(); actions.Add(GetDelegateInvocationExpression(callbacks.BeforeMapCallback, source, destination)); actions.AddRange(GetPropertyAssigns <TSource, TDestination>(source, destination, userInputParts.Bindings)); actions.Add(GetDelegateInvocationExpression(callbacks.AfterMapCallback, source, destination)); var methodBody = Expression.Block(actions); var context = new MappingPostProcessingContext(false); var processedBody = mapExpressionPostProcessor.Process(methodBody, context); var resultLambda = Expression.Lambda <Action <TSource, TDestination> >(processedBody, source, destination); return(resultLambda); }
public Expression Process(Expression inputExpression, MappingPostProcessingContext context) { return(new PropertyAssignPostProcessorVisitor(specificExpressionBuilderFactories).Visit(inputExpression)); }
public Expression Process(Expression inputExpression, MappingPostProcessingContext context) { return(inputExpression.ReplaceExpression(IsIsConstructionCall, Expression.Constant(context.IsConstruction))); }
public Expression Process(Expression inputExpression, MappingPostProcessingContext context) { return(allProcessors.Aggregate(inputExpression, (e, p) => p.Process(e, context))); }