Обновление 2:
Боюсь, что на внешнем виде АОП выглядит не очень хорошо - см. Возможно ли перехватить статический метод для объекта, которым вы не владеете и не создали?
И, как упоминалось в комментариях, похоже, что лучше всего использовать реализацию провайдеров Provider Toolkit и подключить свой хук к SqlConnectionHelper.GetConnection()
Я использую код инструментария, который я значительно очистил, надежно годами без проблем. Позвольте мне подтвердить на 4.0 и упаковать его, если вы заинтересованы.
Обновление:
Хорошо, я думаю, что лучше понимаю вашу потребность, скажите мне, если я прав:
Вам нужно фактическое соединение, используемое провайдером?
SqlMembershipProvider использует вспомогательный класс System.Web.DataAccess.SqlConnectionHolder
для всего доступа к данным.
Я этого не делал, но из того, что я понял, вы могли перехватывать вызовы для создания этого объекта, используя реализацию AOP, такую как Castle DynamicProxy (или одна из библиотек, которая его использует), и получать ваше соединение там.
Может ли кто-нибудь с большим опытом подтвердить или опровергнуть это?
Оригинальный ответ:
Нет необходимости выводить из SqlMembershipProvider. Просто зайдите и получите то, что вам нужно.
string connectionString =
typeof(SqlMembershipProvider)
.GetField("_sqlConnectionString",BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(Membership.Provider);