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}