来自MYSQL Membership Provider的自定义成员资格提供程序

时间:2010-09-16 10:29:50

标签: c# asp.net mysql asp.net-mvc

我正在为MYSQL实现我的自定义成员资格提供程序,我编写了这段代码:

public class CustomSqlMembershipProvider : MySQLMembershipProvider
{  
  public override void Initialize(string name, NameValueCollection configs)
  {
    base.Initialize(name, configs);
  }
}

当我编译这个类时,出现错误:

'Project.Models.CustomSqlMembershipProvider': cannot derive from sealed type
'MySql.Web.Security.MySQLMembershipProvider' C:\...\CustomSqlMembershipProvider.cs  

为什么我收到此错误?我添加了MySql.web和MySql.Data程序集引用。

3 个答案:

答案 0 :(得分:0)

您无法继承sealed课程。 您可以通过继承MembershipProvider

来编写您自己的自定义MySql成员资格提供程序

答案 1 :(得分:0)

这有点落后,但是在花费更多时间考虑与创建自定义MembershipProvider之间的关系之后,我突然想到除了失去使用Microsoft提供的工具来管理用户和角色的能力,抛弃MembershipProvider, RoleProvider等并不是什么大不了的事。至少,如果你正在使用像EntityFramework这样的东西,或者更好的是nHydrate,那就不能处理数据库交互的CRUDdy细节了。

换句话说,因为我正在使用框架(nHydrate),我发现设置自己的自定义身份验证协议更容易。例如,我将Microsoft认为“用户配置文件”信息保留在与执行身份验证凭据信息相同的表中。对我来说,对于许多项目来说,这是一种更自然的方法。

当然,您的里程可能会有所不同。

答案 2 :(得分:0)

正如克劳斯所说,你不能继承一个标有“密封”的类。但是,你可以做其中一种选择:

  1. 如果您有连接器源代码,请删除“sealed”关键字。脏我知道......
  2. 更好的选择是使用“适配器”模式(下面的示例源代码)
  3. 适配器:

    public class MyMySqlProvider : MembershipProvider
    {
        private MySQLMembershipProvider mySqlImpl = new MySQLMembershipProvider();
    
        public override void Initialize(string name, NameValueCollection configs) 
        {
            mySqlImpl.Initialize(name, configs);
            base.Initialie(name, configs);
        }
    
        public override bool OverrideSomethingElse()
        {
            bool someBool = mySqlImpl.OverrideSomethingElse();
    
            if (someBool)
            {
                //someBool = adapt to something else;
            }
    
            return someBool;
        }
    }
    

    我们的想法是实现两者之间的通用方法,以“适应”您的界面。

    http://en.wikipedia.org/wiki/Adapter_pattern