コード例 #1
0
        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);
        }
コード例 #2
0
 public Expression Process(Expression inputExpression, MappingPostProcessingContext context)
 {
     return(new PropertyAssignPostProcessorVisitor(specificExpressionBuilderFactories).Visit(inputExpression));
 }
コード例 #3
0
 public Expression Process(Expression inputExpression, MappingPostProcessingContext context)
 {
     return(inputExpression.ReplaceExpression(IsIsConstructionCall, Expression.Constant(context.IsConstruction)));
 }
コード例 #4
0
 public Expression Process(Expression inputExpression, MappingPostProcessingContext context)
 {
     return(allProcessors.Aggregate(inputExpression, (e, p) => p.Process(e, context)));
 }