public Expression <Action <TSource, TDestination> > CompleteMapDataExpression <TSource, TDestination>(Expression <Func <TSource, TDestination> > inputExpression, IFlashMapperMappingCallbacks <TSource, TDestination> callbacks) { var expressionBlocks = ParseExpression(inputExpression.Body); var resultExpressionBody = Expression.Block(new[] { expressionBlocks.ExtraParameterVariable }, expressionBlocks.ExtraParameterInitialization, expressionBlocks.MapNextStepCall); return(Expression.Lambda <Action <TSource, TDestination> >(resultExpressionBody, inputExpression.Parameters.With(expressionBlocks.ResultVariable))); }
private IMappingConfiguration CreateMapping <TSource, TDestination>(Expression <Func <TSource, TDestination> > mappingExpression, IFlashMapperDependencyResolver resolver, IFlashMapperMappingCallbacks <TSource, TDestination> callbacks) { var mappingGenerator = resolver.GetService <IMappingGenerator>(); var mapping = mappingGenerator.GenerateCompleteMapping(mappingExpression, callbacks); mappingsStorage.SetMapping(mapping); return(this); }
public Mapping <TSource, TDestination> GenerateCompleteMapping <TSource, TDestination>(Expression <Func <TSource, TDestination> > userInput, IFlashMapperMappingCallbacks <TSource, TDestination> callbacks) { var buildExpression = mappingExpressionAutocompleteService.CompleteBuildExpression(userInput, callbacks); var mapDataExpression = mappingExpressionAutocompleteService.CompleteMapDataExpression(userInput, callbacks); var buildMethod = expressionCompiler.Compile(buildExpression); var mapDataMethod = expressionCompiler.Compile(mapDataExpression); return(new Mapping <TSource, TDestination>(buildMethod, mapDataMethod, settings)); }
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); }