问题
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