0

私はクラス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);
        }
    }
}

プロファイルプロバイダーに同じメソッドがありますが、呼び出す方法が見つかりません。私はでそれにアクセスしようとしましたProfileBaseProfileProviderそしてProfile運がなくて、解決策を持っているグーグルに誰もいないようです。

編集

似たようなものを探しています

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

Providerただし、残念ながら、プロファイルからアクセスすることはできません。

4

1 に答える 1

0

私は試行錯誤で解決策を見つけました:

((MySqlProfileProvider)ProfileBase.Properties["ANY_PROFILE_PROPERTY"].Provider).ChangeConnectionString(sRequiredData);
于 2013-02-15T14:00:03.533 に答える