2013-02-14 4 views
0

나는 SqlProfileProvider 클래스를 확장하는 MySqlProfileProvider을 사용하고 있습니다. 내 수업에서는베이스의 연결 문자열을 변경하기 위해 Initialize을 재정의했습니다. 이 모든 것은 절대적으로 훌륭합니다.확장 된 SqlProfileProvider, 내 사용자 지정 메서드를 호출하려면 어떻게해야합니까?

내 문제는 프로필 문자열을 변경하기 위해 프로필 공급자를 초기화 한 후에 전화를 걸어야한다는 것입니다 (초기화 할 때 올바른 연결 문자열을 만드는 데 필요한 정보가 없을 때) 메서드에 액세스하는 것처럼 보입니다.

내가 전화를 함수를 호출하기 위해, 내 사용자 지정 SqlMembershipProvider 클래스에서 작동

((MySqlMembershipProvider)Membership.Providers).ChangeConnectionString(sRequiredData); 

클래스 :

public class MySqlMembershipProvider : SqlMembershipProvider 
{ 
    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) {...} 

    public virtual void ChangeConnectionString(string sRequiredData) 
    { 
     // get db name 
     string sDATABASE_NAME = ManageDBs.GetCompanyDBName(sRequiredData); 

     // Set private property of Membership provider. 
     FieldInfo connectionStringField = GetType().BaseType.GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); 

     string connectionString = connectionStringField.GetValue(this).ToString(); 

     if (!connectionString.Contains(sDATABASE_NAME)) 
     { 
      connectionString = connectionString.Replace("DATABASE_NAME", sDATABASE_NAME); 

      connectionStringField.SetValue(this, connectionString); 
     } 
    } 
} 

가 내 프로필 공급자에 같은 방법을 가지고 있지만 내가 찾을 수 없습니다 전화하는 법. 나는 ProfileBase, ProfileProviderProfile에 액세스하려고 시도했지만 해결책이있는 Google에는 아무도 없을 것 같습니다.

내가

((MySqlProfileProvider)Profile.Provider).ChangeConnectionString(sRequiredData); 

에 가깝다 보이는 뭔가를 찾고 있어요하지만 불행히도 당신은 프로파일을 통해 Provider에 액세스 할 수 없습니다

편집 할 수 있습니다.

((MySqlProfileProvider)ProfileBase.Properties["ANY_PROFILE_PROPERTY"].Provider).ChangeConnectionString(sRequiredData); 
:

답변

0

내가 시행 착오에 의한 해결책을 발견