私はクラス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
運がなくて、解決策を持っているグーグルに誰もいないようです。
編集
似たようなものを探しています
((MySqlProfileProvider)Profile.Provider).ChangeConnectionString(sRequiredData);
Provider
ただし、残念ながら、プロファイルからアクセスすることはできません。