Расширенный 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);
Другие вопросы по тегам