2010-09-16 2 views
1

Я реализую свой собственный поставщик членства для MYSQL для этого я пишу этот код:пользовательский поставщик членства из MYSQL Membership Provider

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

Вы не можете наследовать от класса sealed. Вы можете однако написать свой собственный MySql поставщика членства путем наследования от MembershipProvider

+0

Я только хочу, чтобы написать код, чтобы установить строку подключения из внешнего файла, и я хочу использовать встроенный код от поставщика членства. – Aayushi

+0

, пожалуйста, дайте предположение, что делать, как это сделать. – Aayushi

+0

@Aayushi единственный способ установить строку соединения - это метод, описанный здесь: http://www.integratedwebsystems.com/2010/02/how-to-setup-and -configure-MySQL-члены-провайдер-6-2-2-перенос-на-моно-часть-2-оф-3 / –

0

Это несколько от точки, но после того, как проводить больше времени, чем я думать о том, борьба с созданием пользовательских MembershipProviders вдруг мне пришло в голову, что другие чем потерять возможность использовать предоставленные Microsoft инструменты для управления пользователями и ролями, отказ от членства MembershipProvider, RoleProvider и т. п. - это не такая уж большая сделка. По крайней мере, это не так, если вы используете что-то вроде EntityFramework или, еще лучше, nHydrate, чтобы обрабатывать CRUDdy информацию о взаимодействии с базой данных.

Иными словами, поскольку я использую фреймворк (nHydrate) в любом случае, мне легче настроить собственные протоколы проверки подлинности. Например, я сохраняю то, что Microsoft считает «профилем пользователя» в той же таблице, что и данные учетной записи аутентификации. Для меня это гораздо более естественный подход для многих проектов.

Ваш пробег может отличаться, конечно.

0

Как Клаус говорит, что вы не можете подклассы класса с надписью «запечатан». Однако вы можете сделать один из этих вариантов:

  1. Если у вас есть исходный код соединителя, удалите ключевое слово «запечатанное». грязный я знаю ...
  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

Смежные вопросы