切面编程AOP之Castle.Core

本文详细介绍了如何使用Castle.Core库在C#中实现面向切面编程(AOP)。通过Nuget安装Castle.Core,创建带有虚拟方法的普通类,定义自定义拦截器,并使用ProxyGenerator生成代理对象来实现方法调用前后的拦截。示例代码展示了拦截器的预调用、方法执行和后调用过程。

1.Nuget中搜索Castle.Core并install 

2.创建一个普通的类(注意类中只有标记virtual才能实现拦截 )

 public class TestInterceptor
    {
        public virtual void MethodInterceptor()
        {
            Console.WriteLine("走过滤器");
        }

        public void NoInterceptor()
        {
            Console.WriteLine("没走过滤器");
        }
    }

3. 创建拦截器

public class Interceptor: StandardInterceptor
    {
        protected override void PreProceed(IInvocation invocation)
        {
            Console.WriteLine("调用前的拦截器, 方法名是: {0}", invocation.Method.Name);
        }

        protected override void PerformProceed(IInvocation invocation)
        {
            Console.WriteLine("拦截的方法返回时调用的拦截, 方法名是: {0}", invocation.Method.Name);
        }

        protected override void PostProceed(IInvocation invocation)
        {
            Console.WriteLine("调用后的拦截器, 方法名是: {0}", invocation.Method.Name);
        }
    }

4. 控制台中调用

static void Main(string[] args)
        {
            #region Castle.Core
            ProxyGenerator generator = new ProxyGenerator(); // 实例化代理生成器
            Interceptor interceptor = new Interceptor(); //实例化拦截器

            //使用代理生成器创建Person对象, 而不是使用new关键字实例化
            TestInterceptor test = generator.CreateClassProxy<TestInterceptor>(interceptor);
            Console.WriteLine("当前类型: {0}, 父类型: {1}", test.GetType(), test.GetType().BaseType);
            Console.WriteLine();
            test.MethodInterceptor();
            Console.WriteLine();
            test.NoInterceptor();
            Console.WriteLine();
            Console.ReadLine();
            #endregion
        }

  

转载于:https://www.cnblogs.com/zxhome/p/10730477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值