2011-05-03 125 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