Esempio n. 1
0
        public static TValue Eval <TSource, TValue>(this TSource source, Expression <Func <TSource, TValue> > value)
        {
            var parameters = new Dictionary <string, object> {
                { value.Parameters.First().Name, source }
            };
            var evaluator = new SafeExpressionEvaluator(value.Body, parameters);
            var result    = evaluator.Evaluate();

            if (result == null)
            {
                return(default(TValue));
            }
            return((TValue)result);
        }
Esempio n. 2
0
        public static IPropertyDefinition Property <TProperty>(this IMicroModel model, Expression <Func <TProperty> > propertyGetter)
        {
            propertyGetter = Evaluator.EvaluateClosures(propertyGetter);
            var member        = propertyGetter.GetOutermostMember();
            var propertyInfo  = (PropertyInfo)member.Member;
            var property      = BuildProperty(model, propertyInfo.Name, typeof(TProperty));
            var readEvaluator = new SafeExpressionEvaluator(propertyGetter.Body, new Dictionary <string, object>());

            property.Getter = (x) => readEvaluator.Evaluate();
            AddDependencies(property, propertyGetter);
            if (propertyInfo.CanWrite)
            {
                var writeEvaluator = new SafeExpressionEvaluator(member.Expression, new Dictionary <string, object>());
                property.Setter = (x, y) =>
                {
                    var target = writeEvaluator.Evaluate();
                    propertyInfo.SetValue(target, y, null);
                };
            }
            return(property);
        }