main
 1using System;
 2using System.Linq.Expressions;
 3
 4namespace MoMoney.Presentation.Winforms.Databinding
 5{
 6    public interface IBindingSelector<TypeToBindTo>
 7    {
 8        IPropertyBinder<TypeToBindTo, TypeOfProperty> bind_to_property<TypeOfProperty>(
 9            Expression<Func<TypeToBindTo, TypeOfProperty>> property_to_bind_to);
10    }
11
12    public class BindingSelector<TypeToBindTo> : IBindingSelector<TypeToBindTo>
13    {
14        private readonly TypeToBindTo thing_to_bind_to;
15        private readonly IPropertyInspectorFactory factory;
16
17        public BindingSelector(TypeToBindTo thing_to_bind_to, IPropertyInspectorFactory factory)
18        {
19            this.thing_to_bind_to = thing_to_bind_to;
20            this.factory = factory;
21        }
22
23        public IPropertyBinder<TypeToBindTo, TypeOfProperty> bind_to_property<TypeOfProperty>(
24            Expression<Func<TypeToBindTo, TypeOfProperty>> property_to_bind_to)
25        {
26            var property_information = factory.create<TypeToBindTo, TypeOfProperty>().inspect(property_to_bind_to);
27            return new PropertyBinder<TypeToBindTo, TypeOfProperty>(property_information, thing_to_bind_to);
28        }
29    }
30}