Расширенный SqlProfileProvider, как я могу вызвать мой пользовательский метод?
Я использую MySqlProfileProvider
который расширяет SqlProfileProvider
учебный класс. В моем классе я переигрываю Initialize
для того, чтобы изменить строку подключения базы. Это все работает абсолютно нормально.
Моя проблема заключается в том, что мне нужно сделать вызов после инициализации провайдера профиля, чтобы изменить строку подключения (при ее инициализации у меня нет необходимой информации для создания правильной строки подключения), и я не могу получить доступ к метод.
Это работает в моем обычае 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
, ProfileProvider
а также Profile
без удачи, и, кажется, никто не в Google с решением.
РЕДАКТИРОВАТЬ
Я ищу что-то похожее на
((MySqlProfileProvider)Profile.Provider).ChangeConnectionString(sRequiredData);
но, к сожалению, вы не можете получить доступ Provider
через профиль.
1 ответ
Я нашел решение методом проб и ошибок:
((MySqlProfileProvider)ProfileBase.Properties["ANY_PROFILE_PROPERTY"].Provider).ChangeConnectionString(sRequiredData);