private static Dispatcher CreatePropGetDispatcher(object target, string name)
{
var duck = target as IQuackFu;
if (null != duck)
return (o, args) => ((IQuackFu) o).QuackGet(name, null);
var type = target as Type;
if (null != type)
return DoCreatePropGetDispatcher(null, type, name);
var targetType = target.GetType();
if (targetType.IsCOMObject)
return (o, args) => o.GetType().InvokeMember(name, GetPropertyBindingFlags, null, o, null);
return DoCreatePropGetDispatcher(target, target.GetType(), name);
}