public static bool TryInvokeObject(ScriptEngine engine, object target, BindingFlags invokeFlags, object[] args, object[] bindArgs, bool tryDynamic, out object result) { var hostTarget = target as HostTarget; if (hostTarget != null) { if (hostTarget.TryInvoke(engine, invokeFlags, args, bindArgs, out result)) { return(true); } if (hostTarget is HostType) { return(false); } target = hostTarget.InvokeTarget; tryDynamic = tryDynamic && typeof(IDynamicMetaObjectProvider).IsAssignableFrom(hostTarget.Type); } if ((target != null) && invokeFlags.HasFlag(BindingFlags.InvokeMethod)) { var scriptItem = target as ScriptItem; if (scriptItem != null) { target = DelegateFactory.CreateFunc <object>(scriptItem.Engine, target, args.Length); } var del = target as Delegate; if (del != null) { result = InvokeDelegate(engine, del, args); return(true); } if (tryDynamic) { var dynamicMetaObjectProvider = target as IDynamicMetaObjectProvider; if (dynamicMetaObjectProvider != null) { if (dynamicMetaObjectProvider.GetMetaObject(Expression.Constant(target)).TryInvoke(engine, args, out result)) { return(true); } } } } result = null; return(false); }