我正在为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程序集引用。
答案 0 :(得分:0)
您无法继承sealed
课程。
您可以通过继承MembershipProvider
答案 1 :(得分:0)
这有点落后,但是在花费更多时间考虑与创建自定义MembershipProvider之间的关系之后,我突然想到除了失去使用Microsoft提供的工具来管理用户和角色的能力,抛弃MembershipProvider, RoleProvider等并不是什么大不了的事。至少,如果你正在使用像EntityFramework这样的东西,或者更好的是nHydrate,那就不能处理数据库交互的CRUDdy细节了。
换句话说,因为我正在使用框架(nHydrate),我发现设置自己的自定义身份验证协议更容易。例如,我将Microsoft认为“用户配置文件”信息保留在与执行身份验证凭据信息相同的表中。对我来说,对于许多项目来说,这是一种更自然的方法。
当然,您的里程可能会有所不同。
答案 2 :(得分:0)
正如克劳斯所说,你不能继承一个标有“密封”的类。但是,你可以做其中一种选择:
适配器:
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;
}
}
我们的想法是实现两者之间的通用方法,以“适应”您的界面。