public object Execute(object instance, IContext context)
        {
            var setter = _setter;

            if (setter == null || setter.ConfigVersion != context.ConfigVersion)
            {
                var instanceType = instance.GetType();
                var propertyType = instanceType.GetProperty(_propertyName).PropertyType;

                if (!context.CanGet(propertyType))
                    return instance;

                setter = new Setter
                            {
                                ConfigVersion = context.ConfigVersion,
                                Get = Reflector.GetPropertyValueProvider(propertyType, context),
                                Set = Reflector.GetPropertySetter(instanceType, _propertyName)
                            };
                _setter = setter;
            }

            setter.Set(instance, setter.Get(context));
            return instance;
        }