Is is possible to intercept a static method on an object you don't own and did not create?

旧时模样 提交于 2019-12-13 14:44:16

问题


Referring to my possible answer to this question: How would you audit ASP.NET Membership tables, while recording what user made the changes?

Is it possible to intercept a call, coming from code you do not own, to a ctor on a sealed internal class that you do not own with the intention of manipulating the object before returning?

Concrete example:

SqlMembershipProvider, for all of it's data access, instantiates a connection helper class, System.Web.DataAccess.SqlConnectionHolder.

The desired result is to intercept this instantiation and perform an operation on the public connection that is opened in the ctor of System.Web.DataAccess.SqlConnectionHolder before letting execution continue.

UPDATE: So, as leppie observed regarding my example, what I say I want isn't what I want at all.

The target is now System.Web.DataAccess.SqlConnectionHelper.GetConnection()

So, can we intercept the call to this method?

internal static SqlConnectionHolder GetConnection(string connectionString, bool revertImpersonation)

Is this possible. If so, an brief example would be appreciated.


回答1:


Technically this is possible with an IL rewriter, similar to what Postsharp does. However, given that this is a .NET assembly you're talking about that has a strong name, is stored in the GAC and ngen-ed, that isn't likely to ever get past the "technically possible" stage.



来源:https://stackoverflow.com/questions/2912300/is-is-possible-to-intercept-a-static-method-on-an-object-you-dont-own-and-did-n

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!