3

参考我对这个问题的可能答案:您将如何审核 ASP.NET 成员资格表,同时记录哪些用户进行了更改?

是否可以拦截来自您不拥有的代码的调用,对您不拥有的密封内部类上的 ctor 进行调用,以便在返回之前操纵对象?

具体例子:

SqlMembershipProvider,对于所有的数据访问,实例化一个连接助手类,System.Web.DataAccess.SqlConnectionHolder.

System.Web.DataAccess.SqlConnectionHolder期望的结果是拦截此实例化并在让执行继续之前在 ctor 中打开的公共连接上执行操作。

更新: 所以,正如 leppie 关于我的例子所观察到的,我所说的我想要的根本不是我想要的。

现在的目标是System.Web.DataAccess.SqlConnectionHelper.GetConnection()

那么,我们可以拦截对这个方法的调用吗?

internal static SqlConnectionHolder GetConnection(string connectionString, bool revertImpersonation)

这可能吗。如果是这样,一个简短的例子将不胜感激。

4

1 回答 1

2

从技术上讲,这可以通过 IL 重写器实现,类似于 Postsharp 所做的。但是,鉴于这是您正在谈论的具有强名称的 .NET 程序集,存储在 GAC 和 ngen-ed 中,因此不太可能通过“技术上可行”的阶段。

于 2010-05-26T13:07:20.880 回答