2011-05-03 128 views
2

我有相當大的代碼庫使用各種不同的ADO技術(即一些EF,並且在某些情況下直接使用ADO.Net)。使用AOP技術來攔截ADO.Net

我不知道是否有任何方式在全球範圍內攔截任何ADO.Net調用,這樣我就可以開始審覈信息等,其執行的確切的SQL語句,花費時間,結果返回等

主要的想法是,如果我能做到這一點,我不應該改變任何我現有的代碼,並且我應該能夠攔截/包裝ADO.Net ...這可能嗎?

編輯

它已經建議我考慮PostSharpCciSharpAfterthought,但我要如何使用其中的一個來得到想要的結果?

+0

似乎是一個多餘的問題。 [PostSharp](http://stackoverflow.com/questions/5885886/using-postsharp-to-intercept-ado-net),[AOP](http://stackoverflow.com/questions/5870539/using-aop-techniques -to-intercept-ado-net),[CciSharp](http://stackoverflow.com/questions/5885904/using-ccisharp-to-intercept-ado-net),[EF](http://stackoverflow.com/questions/5885929/using-afterthought-to-intercept-ado-net) - **相反,只要提出一個問題並涵蓋所有方面。** – 2011-05-07 22:18:18

+0

@rockinthesixstring請不要投我我的票,請刪除您的評論。我被要求做到這一點(閱讀評論!) - http://stackoverflow.com/questions/5870539/using-aop-techniques-to-intercept-ado-net – 2011-05-07 22:48:08

回答

1

編號如果您直接針對ADO.NET類型編碼,您不能只告訴DynamicProxy:「嘿,把代理放在所有這些DLL中使用SqlConnection的地方」。 DynamicProxy是一個運行時代理生成器。看來你想要後期編譯 AOP,所以請代之以PostSharpCciSharpAfterthought

編輯:如果這些工具都不夠用,您可以使用Mono.Cecil直接更改您的IL,但這並不容易。例如見:

+0

因此,將PostSharp,CciSharp或Afterthought能夠做這個?即使代碼說「新SqlComment()」我可以代理... – 2011-05-03 18:35:00

+0

@vdh_ant:他們通過重寫IL工作,所以原則上他們可以做任何事情。 – 2011-05-03 18:48:04

+0

好的,現在回到手頭的問題,我將如何使用其中的任何一種來做我需要的?即採取SqlCommand幷包裝它,以便我可以拿出我需要的信息... – 2011-05-04 14:49:07