2014-10-17 26 views
1

PostSharp中是否存在等價的AspectJ調用切入點?PostSharp中AspectJ調用切入點的等價物

具體:ClassC和ClassB都調用方法foo()在ClassC上。我想只攔截從A到C的呼叫,NOT B到C在AspectJ這可以通過配對與呼叫切入點內這樣來實現:

呼叫(* ClassC.foo())& &內( ClassA)

我如何在PostSharp中實現這一點?

回答

1

這是不可能的,因爲MethodInterceptionAspect方法本身不適用於呼叫站點,因此切入點將只能過濾方法,而不能呼叫站點。

可能的解決方案是將兩個方面合作 - 一個管理一個線程靜態變量,另一個將執行截取的方法或執行一些額外的工作。但是,這不是一個理想的解決方案。

+0

因此,在PostSharp的呼叫站點絕對沒有辦法編織?我想過使用一個線程安全開關,但是我想在代碼中調用代碼而不是目標,因爲大多數目標方法都在第三方程序集中。 – MHGameWork 2014-10-17 13:40:15

+0

我正在描述的是這個概念。切入點(是的,定義與AspectJ略有不同)提供了應用該方面的元數據聲明。當然,當你將一個方面應用到其他程序集中聲明的方法時,轉換將在call-site級完成,因爲它是唯一的選擇。 – 2014-10-20 08:15:41

+0

那麼,postsharp將應用一個方面到引用的程序集時,將在調用網站應用該方面? – MHGameWork 2014-10-20 08:31:15