为自定义asp.net成员资格提供程序提供自定义数据库

Irf*_*aza 5 c# asp.net-membership visual-studio-2005

我正在为asp.net应用程序创建自定义成员资格提供程序.我还创建了一个单独的类"DBConnect",它提供数据库功能,如执行SQL语句,执行SP,执行SP或查询以及返回SqlDataReader等等......

我在Global.asax的Session_Start中创建了DBConnect类的实例并存储到会话中.后来使用静态类我在整个应用程序中使用相同的单个会话提供数据库功能.简而言之,我从任何asp.net页面为所有数据库操作提供单点.

我知道我可以编写自己的代码来连接/断开数据库并从我需要覆盖的方法中执行SP.请看下面的代码 -

public class SGI_MembershipProvider : MembershipProvider
{
Run Code Online (Sandbox Code Playgroud)

......

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    {
        if (!ValidateUser(username, oldPassword))
            return false;

        ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true);

        OnValidatingPassword(args);

        if (args.Cancel)
        {
            if (args.FailureInformation != null)
            {
                throw args.FailureInformation;
            }
            else
            {
                throw new Exception("Change password canceled due to new password    validation failure.");
            }
        }

.....        

//Database connectivity and code execution to change password.

}

....

}
Run Code Online (Sandbox Code Playgroud)

我的问题 - 现在我需要的是从顶部描述的相同数据库点执行所有这些重写方法中的数据库部分.这是我必须将会话中存在的DBConnect实例传递给此类,以便我可以访问这些方法.

任何人都可以提供解决方案.可能有一些我不了解的更好的技术.我使用的方法可能是错的.您的建议随时欢迎.

感谢您分享宝贵的时间.

Sky*_*ers 4

了解会员资格提供商的生命周期将有助于解决这个问题。

成员资格提供程序的实例在应用程序启动时启动,并在应用程序AppDomain的生命周期内保持活动状态,这实际上相当于应用程序的生命周期。例如,如果由于某种原因 AppDomain 循环,则应用程序将被释放并启动一个新实例。注册会员资格提供商的新实例在首次使用时启动。

您需要在成员资格提供程序实现实例化数据访问类的实例,或者从提供程序中访问静态方法。我更喜欢使用实例。

在我看来,通过创建单例或将其存储在应用程序中来将会员提供者与其数据访问分开是一种黑客行为,只会导致痛苦、悲伤、失眠和同行之间的信誉。

干杯,祝你好运。