Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自MYSQL成员资格提供程序的自定义成员资格提供程序_C#_Asp.net_Mysql_Asp.net Mvc - Fatal编程技术网

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

C# 来自MYSQL成员资格提供程序的自定义成员资格提供程序,c#,asp.net,mysql,asp.net-mvc,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

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

您不能从类继承。
不过,您可以通过继承来编写自己的自定义MySql成员资格提供程序这有点离题,但在花了太多时间考虑创建自定义成员资格提供程序后,我突然想到,除了失去使用Microsoft提供的工具管理用户和角色的能力之外,放弃会员资格提供商、角色提供商等并不是什么大不了的事。至少,如果您使用EntityFramework或更好的是nHydrate之类的工具来处理数据库交互的粗糙细节,情况就不是这样了

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


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

正如克劳斯所说,您不能将标记为“sealed”的类划分为子类。但是,您可以执行以下备选方案之一:

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

    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;
        }
    }
    
    其思想是实现两者之间的通用方法,以“适应”您的界面


    我只想编写代码来设置外部文件中的连接字符串,我想使用会员资格提供商提供的内置代码。请给出建议,如何执行do@Aayushi设置connectionstring的唯一方法是以下所述的方法: