Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 892
Sky Sanders Avatar asked Jan 31 '26 12:01

Sky Sanders


1 Answers

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.

like image 138
Hans Passant Avatar answered Feb 03 '26 02:02

Hans Passant