private void InterceptAsync(IInvocation invocation, IEnumerable <AbpAuthorizeAttribute> authorizeAttributes) { var authorizationAttributeHelper = _iocResolver.ResolveAsDisposable <IAuthorizeAttributeHelper>(); if (invocation.Method.ReturnType == typeof(Task)) { invocation.ReturnValue = InternalAsyncHelper.InvokeWithPreAndFinalActionAsync( invocation, async() => await authorizationAttributeHelper.Object.AuthorizeAsync(authorizeAttributes), () => _iocResolver.Release(authorizationAttributeHelper) ); } else { invocation.ReturnValue = InternalAsyncHelper.CallInvokeWithPreAndFinalActionAsync( invocation.Method.ReturnType.GenericTypeArguments[0], invocation, async() => await authorizationAttributeHelper.Object.AuthorizeAsync(authorizeAttributes), () => _iocResolver.Release(authorizationAttributeHelper) ); } }