public static object Intercept(MemberInfo member, MethodInfo callerMethod, object target, object[] parameters, Type interceptorProviderType, params IInterceptor[] interceptors)
        {
            if (member is null)
            {
                throw new ArgumentNullException(nameof(member));
            }
            if (callerMethod is null)
            {
                throw new ArgumentNullException(nameof(callerMethod));
            }
            if (interceptorProviderType is null)
            {
                throw new ArgumentNullException(nameof(interceptorProviderType));
            }

            try
            {
                var invocation = new ReflectionInvocation(target, interceptors, member, callerMethod, interceptorProviderType, parameters);
                invocation.Proceed();
                return(invocation.ReturnValue);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 public AwaitableInvocation(ReflectionInvocation invocation)
 {
     this.invocation = invocation;
     this.originalInterceptorIndex = invocation.currentInterceptorIndex;
 }