/// <inheritdoc />
        protected internal override object Invoke(MethodInvocation invocation)
        {
            var targetMethod = MethodCache.GetMethodMap(TargetType, invocation.Method);
            var signature    = new InvocationSignature(
                invocation.Method, targetMethod, DeclaringType,
                TargetType, invocation.Method.GetInvocationType());

            return(Interceptor.Intercept(
                       signature, invocation.MethodCall,
                       invocation.Arguments, Target,
                       invocation.TransparentProxy));
        }