0

매 사용자 지정 공급자에게 멤버 자격 클래스를 캐스팅하지 않고도 코드에서 구현 한 사용자 지정 MembershipProvider를 호출 할 수있는 방법이 있습니까? 예를 들어, 내가 설정과 같이 내 Web.config의 :캐스팅하지 않고도 사용자 지정 MembershipProvider를 호출하십시오.

<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(); 

당신이 잠시 후에 성가신 얻을 시작 사용할 어디서나 캐스트를 수행. 미리 감사드립니다.

당신은 확장 메서드 추가 할 수

답변

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");