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}