PostSharp中AspectJ调用切入点的等价物

PostSharp中AspectJ调用切入点的等价物,aspectj,postsharp,Aspectj,Postsharp,PostSharp中是否有类似AspectJ调用切入点的功能 具体:ClassA和ClassB都对ClassC调用方法foo()。我只想截获从A到C的调用,而不是从B到C的调用。在AspectJ中,这可以通过将调用与内部切入点配对来实现,如下所示: 调用(*ClassC.foo())&&in(ClassA) 如何在PostSharp中实现这一点?这不可能直接实现,因为MethodInterceptionSpect应用于方法本身而不是调用站点,因此切入点只能过滤方法,而不能过滤调用站点 可能的解决

PostSharp中是否有类似AspectJ调用切入点的功能

具体:ClassA和ClassB都对ClassC调用方法foo()。我只想截获从A到C的调用,而不是从B到C的调用。在AspectJ中,这可以通过将调用与内部切入点配对来实现,如下所示:

调用(*ClassC.foo())&&in(ClassA)


如何在PostSharp中实现这一点?

这不可能直接实现,因为MethodInterceptionSpect应用于方法本身而不是调用站点,因此切入点只能过滤方法,而不能过滤调用站点


可能的解决方案是有两个方面相互配合——一个是管理线程静态变量,另一个是执行拦截的方法或做一些额外的工作。然而,这并不是一个理想的解决方案。

所以在PostSharp的呼叫站点上绝对没有办法编织?我曾想过使用threadsafe开关,但我想在调用站点而不是目标站点编写代码,因为大多数目标方法都在第三方程序集中。我所描述的是这个概念。切入点(是的,定义与AspectJ略有不同)提供了应用方面的元数据声明。当然,当您将方面应用于在其他程序集中声明的方法时,转换是在调用站点级别完成的,因为这是唯一的选项。是的,完全正确。如果它在转换的程序集中声明,它将转换方法本身。我认为这解决了问题,但现在我想截取对接口的方法调用。接口的实现是使用动态代理生成的,PostSharp中是否有针对此场景的解决方案?您可以这样使用多播来实现:
[assembly:TestInterceptionSpect(AttributeTargetAssemblys=“mscorlib”,AttributeTargetTypes=“System.IDisposable”,AttributeInheritance=multicastHeritance.Strict)]
。请注意,我们最近修复了此问题,并且它在3.1.52和4.0.32之前不起作用(因此您需要最新版本),使用
IAspectProvider
无法完成此操作。