C# 面向切面编程之AspectCore实践(二)

这篇具有很好参考价值的文章主要介绍了C# 面向切面编程之AspectCore实践(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

在上一篇中对AspectCore进行了初步的了解,用于拦截的属性加在了具体类的方法上。

C# 面向切面编程之AspectCore初探

这一篇验证一下把拦截属性加在接口上,这样实现该接口的类中所对应的方法都会被拦截到;另外示例中还尝试对方法的入参进行了修改,验证了通过AspectContext可以获得当前方法的所有信息。

代码实现

using AspectCore.DynamicProxy;
using AspectCore.DynamicProxy.Parameters;

class Program
{
    static void Main(string[] args)
    {
        ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder();
        IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build();
        SampleInterface sampleInterface = proxyGenerator.CreateInterfaceProxy<SampleInterface, SampleClass>();
        Console.WriteLine(sampleInterface);
        var ret = sampleInterface.Foo(1);
        Console.WriteLine("ret:" + ret);
        sampleInterface.Boo();

        Console.ReadKey();
    }
}

public class SampleInterceptor : AbstractInterceptorAttribute
{
    public override Task Invoke(AspectContext context, AspectDelegate next)
    {
        try
        {
            Console.WriteLine("Call Interceptor Start");
            if (context.ImplementationMethod.Name.Equals("Foo"))
            {
                if (context.Parameters.Length > 0)
                {
                    Console.WriteLine($"Foo Parameter Value[0]:{context.Parameters[0]}");
                    context.Parameters[0] = 2;
                }
                var returnParam = context.GetReturnParameter();
                if (returnParam != null)
                {
                    Console.WriteLine($"return type: {returnParam.Type.Name}");
                }                
            }
            return context.Invoke(next);
        }
        catch (Exception ex)
        {
            throw;
        }
        finally
        {
            Console.WriteLine("Call Interceptor End");
        }
    }
}

public class SampleClass : SampleInterface
{
    public virtual int Foo(int a)
    {
        Console.WriteLine("Call Foo:" + a);
        return 1;
    }

    public virtual void Boo()
    {
        Console.WriteLine("Call Boo");
    }
     
}

[SampleInterceptor]
public interface SampleInterface
{
    int Foo(int a);

    void Boo();
}

调用示例

C# 面向切面编程之AspectCore实践(二),C#,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-796604.html

到了这里,关于C# 面向切面编程之AspectCore实践(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AOP 面向切面编程 入门练习

    添加依赖 Spring配置文件 接口类和实现类 切面类 测试类

    2024年04月11日
    浏览(43)
  • JAVA:面向切面编程AOP

            把某一些功能提取出来与某一对象进行隔离,提取之后可以对某哥单方面的功能进行修改和扩展         也就是把众多方法中的的所有公共代码抽取出来,放到某个地方集中管理         对业务逻辑的各个部分进行了隔离,从而降低业务逻辑各部分之间的耦合,

    2024年02月07日
    浏览(53)
  • Spring面向切面编程(AOP)

    AOP(Aspect Oriented Programming),即面向切面编程,利用一种称为\\\"横切\\\"的技术,剖开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为\\\"Aspect\\\",即切面。所谓\\\"切面\\\",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装

    2024年02月07日
    浏览(49)
  • Spring AOP:面向切面编程

    在软件开发中,我们经常会遇到一些横切关注点(cross-cutting concerns),如日志记录、事务管理和安全性等。这些关注点不属于特定的模块或类,而是横跨整个应用程序。传统的面向对象编程方法往往会将这些关注点与核心业务逻辑混杂在一起,导致代码的可读性和可维护性下

    2024年02月09日
    浏览(47)
  • Spring第三讲:SpringAOP面向切面编程

    5、1什么是AOP AOP(Aspect Orient Programming),面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使

    2024年02月12日
    浏览(45)
  • [SSM]Spring面向切面编程AOP

    目录 十五、面向切面编程AOP 15.1AOP介绍 15.2AOP的七大术语 15.3切点表达式 15.4使用Spring的AOP 15.4.1准备工作 15.4.2基于AspectJ的AOP注解式开发 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的实际案例:事务处理 15.6AOP的实际案例:安全日志 IoC使软件组件松耦合。AOP让你能够捕捉系统中经

    2024年02月15日
    浏览(49)
  • 认识 spring AOP (面向切面编程) - springboot

    本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 AOP: 面向切面编程,也就是面向某一类编程,对某一类事情进行统一处理; spring AOP: 是实现了AOP这种思想的一

    2024年02月14日
    浏览(50)
  • Spring AOP(面向切面编程)和方法拦截

    Spring AOP(面向切面编程)和方法拦截 Spring是一款广泛使用的Java开发框架,提供了丰富的功能和工具,用于简化企业级应用程序的开发。其中一个重要的特性是面向切面编程(AOP)和方法拦截。本文将介绍Spring AOP和方法拦截的概念、工作原理以及在实际开发中的应用。 在软

    2024年02月05日
    浏览(45)
  • 12AOP面向切面编程/GoF之代理模式

    先看一个例子: 声明一个接口: 实现该接口: 存在的问题: 核心功能与边缘功能掺杂(即计算的过程和sout掺杂) 边缘功能尽管重复,但却大量分散,不利于管理 目标: 将重复的代码统一提取,并且[[动态插入]]到每个业务方法! 用代理模式解决: 相关术语: 代理:将非

    2024年01月19日
    浏览(46)
  • JAVA:使用 Spring AOP 实现面向切面编程

    1、简述 在现代的软件开发中,面向切面编程(AOP)是一种重要的编程范式,它允许我们将横切关注点(如日志记录、性能监控、事务管理等)从应用程序的核心业务逻辑中分离出来,以提高代码的模块化和可维护性。Spring 框架提供了强大的 AOP 支持,使得我们可以轻松地实

    2024年04月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包