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]来满足复杂
8584 0
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
131243 65
|
1月前
|
人工智能 Shell Python
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(4)Subagents (子智能体)
本文介绍AI Agent开发中的子智能体(Subagent)模式。通过将复杂任务外包给临时子智能体处理,只返回最终摘要,避免上下文污染。父智能体保持干净对话,子智能体拥有独立上下文,完成任务后立即销毁,实现高效的任务分工和上下文管理。
725 3
|
3月前
|
搜索推荐 关系型数据库 大数据
PL/pgSQL 入门教程(四):使用游标(cursor)
游标是PostgreSQL中“按需取数”的数据指针,避免大查询内存溢出;支持逐行处理、动态查询、精准更新/删除及函数返回大结果集。分未绑定(灵活)与绑定(固定)两类,核心操作为声明→打开→FETCH/MOVE/UPDATE→关闭,FOR循环可自动简化遍历。
|
移动开发 小程序 前端开发
微信小程序自定义导航栏
微信小程序自定义导航栏
690 0
微信小程序自定义导航栏
|
消息中间件 Linux 网络安全
Rabittmq安装教程(Linux版)
Rabittmq安装教程(Linux版)
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
2303 0
|
Linux C# Android开发
一个开源、跨平台的.NET UI框架 - Avalonia UI
一个开源、跨平台的.NET UI框架 - Avalonia UI
1152 3
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
475 4
|
设计模式 架构师 安全
如何提高自己的架构设计能力?
提升架构设计能力涉及深入学习基础知识、业务理解、技术广度与深度、实践经验等多方面。要关注代码的清晰结构、抽象能力、系统性能和可扩展性。学习编程语言、设计模式、系统设计原则和分布式系统是关键。通过实际项目和不断学习反思,可以增强架构设计技能。例如,上述代码展示了清晰的结构和设计原则应用。
1460 0