扩展的SqlProfileProvider,如何调用我的自定义方法

本文关键字:调用 我的 自定义方法 何调用 SqlProfileProvider 扩展 | 更新日期: 2023-09-27 17:59:38

我使用的是扩展SqlProfileProvider类的MySqlProfileProvider。在我的类中,我正在重写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);
        }
    }
}

我的配置文件提供程序中也有同样的方法,但我找不到如何调用它。我曾尝试在ProfileBaseProfileProviderProfile中访问它,但没有成功,谷歌上似乎没有人使用该解决方案。

编辑

我正在寻找类似的东西

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

但不幸的是,您无法通过配置文件访问Provider

扩展的SqlProfileProvider,如何调用我的自定义方法

我通过反复试验找到了解决方案:

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