C# 使用 Castle 实现 AOP及如何用 Autofac 集成 Castle
Castle 是 2003 年诞生于 Apache Avalon 项目,目的是为了创建一个IOC 框架。发展到现在已经有四个组件:。异步函数拦截Castle.DynamicProxy 对异步函数的拦截跟同步没啥差别,只是,如果要在方法执行完成后插入内容,需要 await上面这个写法是简单粗暴的,如果碰到返回值是 Task,或者不是异步函数,就会出错。所以这里是要对返回值进行一个判断的。可以使用 Castle.Core.AsyncInterceptor 包,它包装了 Castle,使异步调用更简单。Castle.Core.AsyncInterceptor 的 GitHub 地址:这是 Castle.Core.AsyncInterceptor 提供的示例写法,这里有个问题,也是我的疑惑。invocation.ReturnValue = InternalInterceptAsynchronous; 将导致代理返回的 Task 是一个新的 Task,这一点我们可以输出 Task.Id 来确认。如果有小伙伴知道为什么要返回一个新的 Task,请留言告诉我,谢谢!Autofac 集成Autofac.Extras.DynamicProxy 是一个 Autofac 扩展,可与 Castle 一起提供 AOP 拦截。
用户评论