里面实现了两种代理方式,一种是 面向接口实现 的方式,另一种是 继承重写 的方式。
但是继承重写的方式需要把业务类的所有方法写成virtual虚方法,动态类会重写该方法。
我们从上一节的Demo中获取到运行时生成的代理类dll,用ILSpy反编译查看源代码:
可以看到,我们的代理类分别调用了我们特性标签中的各项方法。
核心代码分析(源代码在上面折叠部位已经贴出):
解释:如果该方法存在Action标签,那么加载 action 标签实例化对象,加载参数,执行Before方法;如果该方法存在Interceptor标签,那么使用类字段this._interceptor调用该标签的Invoke方法。
解释:如果面的Interceptor特性标签不存在,那么会加载当前扫描的方法对应的参数,直接调用方法;如果Action标签存在,则将刚才调用的结果包装成object对象传递到After方法中。













