[英]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)所说,您不能将标记为“密封”的类归为一类。 但是,您可以选择以下一种方法:
适配器:
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;
}
}
这个想法是实现两者之间的通用方法,以“适应”您的界面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.