protected internal virtual PropertySetter OnLoadSetter()
{
if (!PropertyInfo.CanWrite)
return null;
var selfParam = Expression.Parameter(typeof(object), "x");
var valueParam = Expression.Parameter(typeof(object), "value");
var expr = Expression.Lambda<Action<object, object, IContainer>>(
Expression.Assign(
Expression.Property(
Expression.Convert(selfParam, PropertyInfo.DeclaringType),
PropertyInfo
),
Expression.Convert(valueParam, PropertyInfo.PropertyType)
),
selfParam,
valueParam,
Expression.Parameter(typeof(IContainer), "ctx"));
return new PropertySetter(expr.Compile());
}