【问题标题】:Custom membership provider from MYSQL Membership Provider来自 MYSQL Membership Provider 的自定义成员资格提供程序
【发布时间】:2010-09-16 10:29:49
【问题描述】:

我正在为 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 程序集引用。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我只想编写代码来设置外部文件的连接字符串,我想使用会员提供者的内置代码。
    • 请给出建议怎么做,怎么做
    • @Aayushi 设置连接字符串的唯一方法是这里描述的方法:integratedwebsystems.com/2010/02/…
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      正如 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多