Я сразу признаю, что мои знания провайдеров ограничены написанием их для членства / профиля / ролей, но общие вещи все равно должны применяться:
Если вы не предоставите разработчику возможность указать другого поставщика, тогда да, по умолчанию будет использоваться поставщик, который будет использоваться.
Итак, на примере аутентификации, если в вашем файле 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.
Вы можете использовать другого поставщика одним из двух способов:
- Вы можете указать другого поставщика с помощью MembershipProvider свойство элемента управления Login
- Вы можете указать метод, который будет вызываться для элементов управления Аутентификация , где вы можете выбрать своего провайдера.
Пример метода 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.
Надеюсь, это поможет!