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

时间:2013-02-14 17:25:36

标签: c# 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);
        }
    }
}

我在个人资料提供程序中使用相同的方法,但我找不到如何调用它。我尝试在ProfileBaseProfileProviderProfile中访问它而没有运气,谷歌似乎没有任何人使用该解决方案。

修改

我正在寻找类似于

的东西
((MySqlProfileProvider)Profile.Provider).ChangeConnectionString(sRequiredData);

但很遗憾,您无法通过个人资料访问Provider

1 个答案:

答案 0 :(得分:0)

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

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