main
 1using System;
 2using System.Linq.Expressions;
 3
 4namespace MoMoney.boot.container.registration.mapping
 5{
 6    public class TargetActionFactory : ITargetActionFactory
 7    {
 8        readonly IPropertyResolver property_resolver;
 9
10        public TargetActionFactory(IPropertyResolver property_resolver)
11        {
12            this.property_resolver = property_resolver;
13        }
14
15        public TargetActionFactory() : this(new PropertyResolver())
16        {
17        }
18
19        public ITargetAction<Target, ValueType> create_action_target_from<Target, ValueType>(
20            Expression<Func<Target, ValueType>> target_expression)
21        {
22            var property = property_resolver.resolve_using(target_expression);
23            if (property.CanWrite)
24                return new DelegateTargetAction<Target, ValueType>((x, y) => property.SetValue(x, y, new object[0]));
25
26            throw new ImmutablePropertyException(typeof (Target), property);
27        }
28    }
29}