0

毎回カスタム プロバイダーにメンバーシップ クラスをキャストすることなく、コードに実装したカスタム 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();

使用したい場所でキャストを行うと、しばらくすると煩わしくなり始めます。前もって感謝します。

4

1 に答える 1

0

拡張メソッドを追加できます。

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");
于 2012-08-29T21:02:55.837 に答える