通过反射和委托实现 AOP,在方法执行前后添加日志、计时等通用逻辑。
public class AopHelper { // 包装方法,添加前置和后置逻辑 public static void WrapMethod(Action action, Action before = null, Action after = null) { before?.Invoke(); try { action.Invoke(); } catch (Exception ex) { Console.WriteLine($"方法执行异常: {ex.Message}"); } after?.Invoke(); } // 带返回值的方法包装 public static T WrapMethod<T>(Func<T> func, Action before = null, Action after = null) { before?.Invoke(); T result = default; try { result = func.Invoke(); } catch (Exception ex) { Console.WriteLine($"方法执行异常: {ex.Message}"); } after?.Invoke(); return result; } } // 调用示例 public static void TestAop() { // 前置:计时开始 后置:计时结束 var stopwatch = new Stopwatch(); AopHelper.WrapMethod(() => { Thread.Sleep(1000); Console.WriteLine("业务方法执行中"); }, () => stopwatch.Start(), () => { stopwatch.Stop(); Console.WriteLine($"方法耗时: {stopwatch.ElapsedMilliseconds}ms"); }); }