Можно ли перехватить статический метод на объекте, которым вы не владеете и не создали? - PullRequest
3 голосов
/ 26 мая 2010

Ссылаясь на мой возможный ответ на этот вопрос: Как бы вы провели аудит таблиц членства ASP.NET, записывая, какой пользователь внес изменения?

Возможно ли перехватить вызов, исходящий из кода, которым вы не владеете, к ctor в запечатанном внутреннем классе, которым вы не владеете с намерением манипулировать объектом перед возвратом?

Конкретный пример:

SqlMembershipProvider для всего доступа к данным создает экземпляр класса помощника подключения, System.Web.DataAccess.SqlConnectionHolder.

Желаемым результатом является перехват этого экземпляра и выполнение операции с общедоступным соединением, которое открыто в ctor-адресе System.Web.DataAccess.SqlConnectionHolder перед продолжением выполнения.

UPDATE: Итак, как заметил Леппи в отношении моего примера, то, что я хочу сказать, совсем не то, что я хочу.

Цель теперь System.Web.DataAccess.SqlConnectionHelper.GetConnection()

Итак, можем ли мы перехватить вызов этого метода?

internal static SqlConnectionHolder GetConnection(string connectionString, bool revertImpersonation)

Возможно ли это. Если это так, краткий пример будет оценен.

1 Ответ

2 голосов
/ 26 мая 2010

Технически это возможно с помощью перезаписывающего устройства IL, аналогичного тому, что делает Postsharp. Однако, учитывая, что это .NET-сборка, о которой вы говорите, она имеет строгое имя, хранится в GAC и ngen-ed, и вряд ли когда-либо пройдет этап «технически возможного».

...