Вызов пользовательского MembershipProvider без преобразования Membership.Provider

Есть ли способ вызвать настраиваемый MembershipProvider, который я реализовал в коде, без необходимости каждый раз приводить класс членства к моему настраиваемому поставщику? Например, я настраиваю свой web.config так:

<connectionStrings>
    <add name="TestDB"
         connectionString="conn_str_here"
         providerName="System.Data.SqlClient" />
</connectionStrings>

<membership defaultProvider="CustomSqlMembershipProvider">
    <providers>
    <clear/>
    <add name="CustomSqlMembershipProvider" type="Common.CustomSqlMembershipProvider" connectionStringName="TestDB"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
    </providers>
</membership>

И мой собственный класс провайдера:

namespace Common 
{
    public class CustomSqlMembershipProvider : SqlMembershipProvider
    {
        public void ChangeUsername()
        {
            // ...
        }
    }
}

Теперь, чтобы вызвать мою новую пользовательскую функцию, есть ли способ разрешить Membership.ChangeUsername() вместо того, чтобы делать это:

CustomSqlMembershipProvider customMembership = Membership.Provider as CustomSqlMembershipProvider;
customMembership.ChangeUsername();

Использование повязки везде, где вы хотите, через некоторое время начинает раздражать. Заранее спасибо.




Ответы (1)


Вы можете добавить метод расширения:

namespace System.Web.Membership
{
    public static class MembershipProviderExtensions
    {
        public static void ChangeUsername(this MembershipProvider provider, string oldUsername, string newUsername)
        {
            var customProvider = provider as CustomSqlMembershipProvider;
            if (customProvider == null) throw new Exception("Invalid provider type.");

            customProvider.ChangeUsername(oldUsername, newUsername);
        }
    }
}

Использование:

Membership.Provider.ChangeUsername("bob", "jane");
person technophile    schedule 29.08.2012