博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Castle.Core实现方法拦截器
阅读量:4973 次
发布时间:2019-06-12

本文共 2411 字,大约阅读时间需要 8 分钟。

1.去NuGet下载 Castle.Core.dll

2.建一个普通的类。注意:本类2个方法,测试是否走拦截器。这里只有标记Virtual才能实现方法拦截。代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Castle{   public class TestInterceptor    {         public virtual void MethodInterceptor()        {             Console.WriteLine("走过滤器");        }        public void NoInterceptor()        {            Console.WriteLine("没有走过滤器");        }     }}
View Code

 

3.拦截器 重写拦截器方法:

PreProcced,在进入拦截的方法之前调用。PerformProceed,在拦截的方法返回时调用。PostProcced,在拦截的方法运行完成后调用。 代码如下:

using Castle.DynamicProxy;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Castle{   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);            base.PerformProceed(invocation);         }        ///         /// 调用后的拦截器        ///         ///         protected override void PostProceed(IInvocation invocation)        {            Console.WriteLine("调用后的拦截器,方法名是:{0}。", invocation.Method.Name);         }    }}
View Code

 

4.调用

using Castle.DynamicProxy;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Castle{    class Program    {        static void Main(string[] args)        {            ProxyGenerator generator = new ProxyGenerator();//实例化【代理类生成器】              Interceptor interceptor = new Interceptor();//实例化【拦截器】              //使用【代理类生成器】创建Person对象,而不是使用new关键字来实例化              TestInterceptor test = generator.CreateClassProxy
(interceptor); Console.WriteLine("当前类型:{0},父类型:{1}", test.GetType(), test.GetType().BaseType); Console.WriteLine(); test.MethodInterceptor(); Console.WriteLine(); test.NoInterceptor(); Console.WriteLine(); Console.ReadLine(); } }}
View Code

 

5.输出结果:

 

转载于:https://www.cnblogs.com/liudehua0/p/7460030.html

你可能感兴趣的文章
两栏自适应布局延展到多栏自适应布局
查看>>
[Codeforces Round #162 (Div. 2)]C. Escape from Stones
查看>>
(最小路径覆盖) poj 2446
查看>>
Snapde和Excel、PowerPivot、WPS打开超大CSV文件性能比较
查看>>
MapReduce:超大机群上的简单数据处理
查看>>
深度图像特征在推荐和广告中的应用(一)
查看>>
环境搭建及创建对象方式及赋值(注入)
查看>>
【面向对象设计与构造】第四次博客作业
查看>>
Silverlight WCF RIA服务(四)如何添加和移除RIA Services Link
查看>>
C++对文件进行加密解密
查看>>
centos6.5安装apache2
查看>>
My code review
查看>>
Daily Scrum 2012/11/01
查看>>
Redis HyperLogLog
查看>>
容器,组件,面板
查看>>
常见HTML的!DOCTYPE声明
查看>>
※剑指offer系列37:求1+2+3……+n
查看>>
想在DPC中做个DELAY结果....
查看>>
分页技术
查看>>
密码学概念
查看>>