我正在尝试使用Spring.NET对AOP的支持来进行控制/面向方面编程的依赖注入/反转(对于大量的流行语感到抱歉 - 也许我会发布一个单独的问题,要求某人澄清差异:))。
具体来说,我希望拦截一个递归方法调用,这样每次调用该方法时,都会调用AOP通知/拦截器。
Spring.Net似乎没有拦截除第一个方法调用之外的任何东西。我认为 Spring.Net正在为每个实例维护1个拦截器链,并且在第一个方法调用完成之前不再调用任何拦截器。
是否有任何关于获取为每个方法调用触发的拦截器(建议)的信息,包括递归调用?
我可以提供代码/示例输出,如果这有用的话。 谢谢!
答案 0 :(得分:4)
答案 1 :(得分:2)
如果您使用基于代理的AOP,那么这对递归方法调用不起作用。对目标的第一次调用将被代理拦截,您的建议将会运行。然后将调用目标上的方法,并且后续调用将保留在目标类中,而不知道代理。实现此功能的唯一方法是实际修改字节码,以便类本身包含行为。
我实际上没有使用过Spring.NET(只有Spring和Java),所以我不知道.NET .NET中存在什么类型的字节码编织选项。
答案 2 :(得分:0)
我知道这不是Spring.NET本身,但请看PostSharp。它为您提供了不依赖于动态代理的编译时编织,并将处理递归方法调用。虽然配置略有不同......