private object PerformInvocation(object target, string funcName, object[] args,
params Func<object[], object>[] invokers)
{
foreach (var interceptor in Intercepters)
{
object result;
if (interceptor(target, funcName, args, out result))
{
return MarshallToBike(result);
}
}
args = MarshallArgumentsToClr(args);
for (int i = 0; i < invokers.Length - 1; i++)
{
// First call must be Fasterflect call
if (i == 0 && args.Any(arg => arg == null))
continue;
try
{
return MarshallToBike(invokers[i](args));
}
catch
{
continue;
}
}
return MarshallToBike(invokers[invokers.Length - 1](args));
}