繁体   English   中英

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

[英]Custom membership provider from MYSQL Membership Provider

我为此实现了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程序集引用。

您不能从sealed类继承。 但是,您可以通过从MembershipProvider继承来编写自己的自定义MySql成员资格提供程序

这有点不切实际,但是在花了我比想多的时间来考虑创建自定义MembershipProviders时,我突然想到,除了失去使用Microsoft提供的用于管理用户和角色的工具的能力之外,抛弃了MembershipProvider,RoleProvider和好像没什么大不了的。 至少,不是使用EntityFramework之类的东西,或者更好的是使用nHydrate来处理数据库交互的CRUDdy详细信息。

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

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

正如克劳斯(Klaus)所说,您不能将标记为“密封”的类归为一类。 但是,您可以选择以下一种方法:

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

适配器:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM