Шаблон провайдера и поставщик по умолчанию - PullRequest
1 голос
/ 26 февраля 2009

Я пытаюсь реализовать шаблон провайдера в пользовательском веб-элементе управления. Я все еще пытаюсь понять закономерность, и у меня есть следующие вопросы.

Является ли поставщик по умолчанию поставщиком, который всегда будет использоваться при загрузке моего элемента управления? Из того, что я могу сказать, используемый провайдер всегда будет по умолчанию, но я не уверен, потому что в документации MSDN сказано, что серверные элементы управления, которые позволяют выбирать провайдеров, должны иметь свойство Provider, значение которого по умолчанию равно значению defaultProvider. Для меня это означает, что элемент управления может загружать определенного поставщика на основе его свойства Provider, если этот поставщик находится в файле конфигурации. Это верно? Поэтому поставщик по умолчанию возвращается, если не запрашивается конкретный поставщик.

Чтобы сменить провайдера, нужно ли просто изменить провайдера по умолчанию в моем конфигурационном файле? <- Я думаю, что это неправильно, так как это просто изменит возвращенный defaultProvider. </p>

Правильно ли это: в элементе управления поставщик по умолчанию будет загружен в метод события OnLoad элемента управления? Мне нужно передать контрольные данные из разных источников в зависимости от провайдера, но полученные данные затем будут помещены в класс. что элемент управления будет использовать для визуализации себя.

Я также запутался, как получить данные для элемента управления со страницы? Скажем, у моей ProviderBase был метод LoadData

Тогда в моем SQLCustomerProvider я реализовал бы метод LoadData, можно ли здесь настраивать этот код так, чтобы он считывал мои конкретные данные и загружался в класс, или страница, использующая элемент управления, загружает данные в класс?

Спасибо!

1 Ответ

1 голос
/ 29 июля 2009

Я сразу признаю, что мои знания провайдеров ограничены написанием их для членства / профиля / ролей, но общие вещи все равно должны применяться:

Если вы не предоставите разработчику возможность указать другого поставщика, тогда да, по умолчанию будет использоваться поставщик, который будет использоваться.

Итак, на примере аутентификации, если в вашем файле web.config было следующее:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
  <providers>
    <remove name="AspNetSqlProvider" />
    <add name="SqlProvider"
      type="System.Web.Security.SqlMembershipProvider"
      connectionStringName="SqlServices"
      enablePasswordRetrieval="false"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="true"
      passwordFormat="Hashed"
      applicationName="/" />
    <add name="AdProvider"
      type="System.Web.Security.ActiveDirectoryMembershipProvider" />
  </providers>
</membership>

Когда вы добавляете элемент управления Login где-то на странице, он будет использовать SqlProvider.

Вы можете использовать другого поставщика одним из двух способов:

  1. Вы можете указать другого поставщика с помощью MembershipProvider свойство элемента управления Login
  2. Вы можете указать метод, который будет вызываться для элементов управления Аутентификация , где вы можете выбрать своего провайдера.

Пример метода 2:

private void OnAuthenticate(object sender, AuthenticateEventArgs e){
  bool authenticated = false;

  MembershipProvider sqlProvider = Membership.Providers["SqlProvider"];

  authenticated = sqlProvider.ValidateUser(Login1.UserName, Login1.Password);

  if (!authenticated){
    // User not found in database, try Active Directory:
    MembershipProvider adProvider = Membership.Providers["AdProvider"];
    authenticated = adProvider.ValidateUser(Login1.UserName, Login1.Password);
  }

  e.Authenticated = authenticated;
}

Другими способами, которыми вы могли бы сделать это на своем собственном элементе управления, является предоставление свойства Provider и проверка его значения, а также использование этого поставщика вместо defaultProvider.

Как правило, модель провайдера используется для предоставления набора поведения по умолчанию известному классу, поэтому у всех провайдеров членства есть (например) метод GetUser , который возвращает MembershipUser - основная цель реализации GetUser в AspNetSqlMembershipProvider состоит в загрузке данных MembershipUser из базы данных SQL ASP.NET.

Надеюсь, это поможет!

...