private static Dispatcher CreatePropSetDispatcher(object target, string name, object value)
{
var duck = target as IQuackFu;
if (null != duck)
return (o, args) => ((IQuackFu) o).QuackSet(name, null, args[0]);
var type = target as Type;
if (null != type)
return DoCreatePropSetDispatcher(null, type, name, value);
var targetType = target.GetType();
if (targetType.IsCOMObject)
return (o, args) => o.GetType().InvokeMember(name, SetPropertyBindingFlags, null, o, args);
return DoCreatePropSetDispatcher(target, targetType, name, value);
}