C# 实现简单的 AOP(面向切面编程)

简介: 通过反射与委托实现AOP,可在方法执行前后动态添加日志、计时等横切逻辑,提升代码复用性与可维护性。

通过反射和委托实现 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");
    });
}
相关文章
|
存储 自然语言处理 前端开发
领域驱动设计(DDD)-基础思想
一、序言     领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。 二、领域驱动设计 DDD是什么 wiki释义:     领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂
8770 0
|
资源调度 算法 计算机视觉
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
2295 0
数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
147205 65
|
5月前
|
搜索推荐 关系型数据库 大数据
PL/pgSQL 入门教程(四):使用游标(cursor)
游标是PostgreSQL中“按需取数”的数据指针,避免大查询内存溢出;支持逐行处理、动态查询、精准更新/删除及函数返回大结果集。分未绑定(灵活)与绑定(固定)两类,核心操作为声明→打开→FETCH/MOVE/UPDATE→关闭,FOR循环可自动简化遍历。
|
人工智能 移动开发 前端开发
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
蚂蚁团队推出的AI前端研发平台WeaveFox,能够根据设计图直接生成前端源代码,支持多种应用类型和技术栈,提升开发效率和质量。本文将详细介绍WeaveFox的功能、技术原理及应用场景。
7445 68
WeaveFox:蚂蚁集团推出 AI 前端智能研发平台,能够根据设计图直接生成源代码,支持多种客户端和技术栈
|
Linux C# Android开发
一个开源、跨平台的.NET UI框架 - Avalonia UI
一个开源、跨平台的.NET UI框架 - Avalonia UI
1283 3
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
558 4
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
2513 0
|
设计模式 架构师 安全
如何提高自己的架构设计能力?
提升架构设计能力涉及深入学习基础知识、业务理解、技术广度与深度、实践经验等多方面。要关注代码的清晰结构、抽象能力、系统性能和可扩展性。学习编程语言、设计模式、系统设计原则和分布式系统是关键。通过实际项目和不断学习反思,可以增强架构设计技能。例如,上述代码展示了清晰的结构和设计原则应用。
1543 0
|
缓存 算法 图形学
帧同步总结
帧同步总结
943 0