main
 1using System;
 2using System.Linq.Expressions;
 3
 4namespace MoMoney.boot.container.registration.mapping
 5{
 6    public class ExpressionSourceEvaluator<Input, Result> : ISourceEvaluator<Input, Result>
 7    {
 8        readonly Expression<Func<Input, Result>> original_expression;
 9        Func<Input, Result> evaluator_expression;
10
11        public ExpressionSourceEvaluator(Expression<Func<Input, Result>> original_expression)
12        {
13            this.original_expression = original_expression;
14        }
15
16        public Result evaluate_against(Input input)
17        {
18            initialize_evaluator();
19            return evaluator_expression(input);
20        }
21
22        void initialize_evaluator()
23        {
24            if (evaluator_expression != null) return;
25            evaluator_expression = original_expression.Compile();
26        }
27    }
28}