private static PropertySetter CreateInstance(Type targetType, string propertyName)
        {
            if (!propertyName.Contains('.'))
                return new PropertySetter(targetType, propertyName);

            var sourceType = targetType;
            var names = propertyName.Split('.');
            var getters = new List<PropertyGetter>();
            foreach (var name in names.Take(names.Length - 1))
            {
                getters.Add(PropertyGetter.Create(sourceType, name));
                sourceType = sourceType.GetProperty(name).PropertyType;
            }

            var setter = new PropertySetter(sourceType, names.Last());
            return new PropertyChainSetter(targetType, propertyName, getters, setter);
        }
 public DataRecordToPropertyMapper(int index, PropertySetter setter, IValueSerializer serializer = null)
 {
     _index = index;
     _setter = setter;
     _serializer = serializer;
 }
 internal PropertyChainSetter(Type targetType, string propertyName, IEnumerable<PropertyGetter> getters, PropertySetter setter)
     : base(targetType, propertyName)
 {
     _getters = getters;
     _setter = setter;
 }