AopHelper.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Castle.DynamicProxy;
  2. using System;
  3. using System.Reflection;
  4. using System.Threading.Tasks;
  5. namespace Admin.Core.Aop
  6. {
  7. public class AopHelper
  8. {
  9. public static async Task<T> ExecuteGenericMethod<T>(Task<T> returnValue, Action<T> callBackAction, Action<Exception> exceptionAction, Action finallyAction)
  10. {
  11. try
  12. {
  13. var result = await returnValue;
  14. callBackAction?.Invoke(result);
  15. return result;
  16. }
  17. catch (Exception ex)
  18. {
  19. exceptionAction?.Invoke(ex);
  20. return default;
  21. }
  22. finally
  23. {
  24. finallyAction?.Invoke();
  25. }
  26. }
  27. public static object CallGenericMethod(IInvocation invocation, Action<object> callBackAction, Action<Exception> exceptionAction, Action finallyAction)
  28. {
  29. return typeof(AopHelper)
  30. .GetMethod("ExecuteGenericMethod", BindingFlags.Public | BindingFlags.Static)
  31. .MakeGenericMethod(invocation.Method.ReturnType.GenericTypeArguments[0])
  32. .Invoke(null, new object[] { invocation.ReturnValue, callBackAction, exceptionAction, finallyAction });
  33. }
  34. }
  35. }