Autofac Method-Level DynamicProxy 接口、类中的方法级别代理
国内国外各种找文档,根据方法或类上的特性,通过autofac扫描类注册服务时自动连接到对应的拦截器。
相关Autofac 动态代理基础可以参考园里其他博客。
如何实现方法级别(接口、类中的方法)的动态代理
参考代码,我的仓库 https://github.com/qiqiqiyaya/Autofac-Method-Level-DynamicProxy ,记得star!!!
autofac 相关文章 https://autofac.readthedocs.io/en/latest/advanced/interceptors.html
需要安装的包
部分代码借鉴ABP框架
直接进入正题:
1.需要创建异步拦截器IAsyncInterceptor ,由Castle.Core.AsyncInterceptor包提供。
2.创建一个功能类似适配器的类,该类作用 “Intercepts method invocations and determines if is an asynchronous method.” 适配用于异步的 异步拦截器(其实异步拦截器可适用于同步或异步方法)。
在ABP源码里面copy的,哈哈哈
3.创建一个代理生成器钩子,其中ShouldInterceptMethod决定哪些方法应该被拦截。
4.使用autofac注册服务时启用拦截器(注意“EnableClassInterceptors”与“EnableInterfaceInterceptors”区别)
创建一个测试服务
实现类
注册服务:
5.只有虚方法、接口中定义的方法才会被动态代理
本文作者:youliCC