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; }