.NET Interceptor with Dynamic Proxy
2015-10-29 17:32
423 查看
在方法执行的前后做一个操作,比如写日志等,但又不想侵入性太大,可以考虑使用动态代理来实现。
1.下载Castle
Install-Package Castle
2.示例代码
3.总结
动态代理的这种用法类似ASP.NET MVC 中的HttpModule,可以结合Spring.NET,达到灵活配置,是责任链模式的一种体现。在我们自己设计的模块中,我们也可以使用这种方式达到更加灵活的架构.
1.下载Castle
Install-Package Castle
2.示例代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Castle.DynamicProxy; namespace CastleDynamicProxyDemo { class Program { static void Main(string[] args) { var generator = new ProxyGenerator(); var c = generator.CreateClassProxy<Calculator>( new CalculatorInterceptor(), new LogInterceptor()); c.Add(11, 22); Console.ReadKey(); } } public interface ICalculator { int Add(int a, int b); } public class Calculator : ICalculator { public virtual int Add(int a, int b) { Console.WriteLine(a+b); return a + b; } } public abstract class Interceptor : IInterceptor { public void Intercept(IInvocation invocation) { ExecuteBefore(invocation); invocation.Proceed(); ExecuteAfter(invocation); } protected abstract void ExecuteAfter(IInvocation invocation); protected abstract void ExecuteBefore(IInvocation invocation); } public class CalculatorInterceptor : Interceptor { protected override void ExecuteBefore(Castle.DynamicProxy.IInvocation invocation) { Console.WriteLine("CalculatorInterceptor Start"); } protected override void ExecuteAfter(Castle.DynamicProxy.IInvocation invocation) { Console.WriteLine("CalculatorInterceptor End"); } } public class LogInterceptor : Interceptor { protected override void ExecuteBefore(Castle.DynamicProxy.IInvocation invocation) { Console.WriteLine("LogInterceptor Start"); } protected override void ExecuteAfter(Castle.DynamicProxy.IInvocation invocation) { Console.WriteLine("LogInterceptor End"); } } }输出结果:
3.总结
动态代理的这种用法类似ASP.NET MVC 中的HttpModule,可以结合Spring.NET,达到灵活配置,是责任链模式的一种体现。在我们自己设计的模块中,我们也可以使用这种方式达到更加灵活的架构.
相关文章推荐
- extjs 为某个事件设置拦截器
- 动态代理的5模式使用示例和Mixin模式
- 浅析JAVA中过滤器、监听器、拦截器的区别
- java实现动态代理示例分享
- java使用动态代理来实现AOP(日志记录)的实例代码
- java利用反射实现动态代理示例
- Java实现动态代理
- java自定义拦截器用法实例
- java动态代理和cglib动态代理示例分享
- PHP的拦截器实例分析
- 深入解析java中的静态代理与动态代理
- java代理模式与动态代理模式详解
- 代理模式之Java动态代理实现方法
- 防止未登录用户操作―基于struts2拦截器的简单实现
- java动态代理详解
- java 静态代理 动态代理深入学习
- java jdk动态代理详解
- SpringMVC+MyBatis项目总结(四)
- struts使用拦截器注解
- AOP切面编程