Я реализую настраиваемого поставщика членства, и, кажется, все идет гладко, пока я не создаю объект MembershipUser. В этот момент я получаю сообщение об ошибке:
Указано недопустимое имя поставщика членства. Имя параметра: providerName
В web.config
ключ членства
<membership defaultProvider="MembersProvider">
<providers>
<clear/>
<add name="MembersProvider" type="Members.Providers.MembersProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="DeviceDatabase" />
</providers>
</membership>
При создании объекта MembershipUser из моего пользовательского класса User:
public static MembershipUser ToMembershipUser(User user)
{
MembershipUser member = new MembershipUser
("MembersProvider"
, user.Name
, user.Id
, user.EmailAddress
, user.PasswordQuestion
, user.Comment
, user.IsApproved
, user.IsLockedOut
, user.DateCreated
, user.LastLoginDate ?? DateTime.MinValue
, user.LastActivityDate ?? DateTime.MinValue
, user.LastPasswordChangedDate ?? DateTime.MinValue
, user.LastLockoutDate ?? DateTime.MinValue
);
return member;
}
(Я понимаю, что мог бы просто унаследовать свой класс User от MembershipUser, но он уже является частью существующей иерархии классов. Честно говоря, я думаю, что это первый раз, когда я столкнулся с законной потребностью в множественном наследовании!) em>
Мне кажется, что параметр new MembershipUser(...)
providerName должен соответствовать тому, что задано в web.config
, но, поскольку они уже совпадают, я не понимаю, как действовать дальше.
Есть ли удобный способ получить имя активного поставщика членства в коде?
Я начинаю думать, что использование встроенной системы членства - это излишнее и больше проблем, чем оно того стоит.
Изменить. Не уверен, что это актуально, но класс настраиваемого поставщика членства находится в библиотеке классов, а не в основном проекте WAP.
Обновить Вот содержимое объекта System.Web.Security.Membership.Provider
, отображаемое в командном окне VS2010:
>eval System.Web.Security.Membership.Provider
{Members.Providers.MembersProvider}
[Members.Providers.MembersProvider]: {Members.Providers.MembersProvider}
base {System.Configuration.Provider.ProviderBase}: {Members.Providers.MembersProvider}
ApplicationName: null
EnablePasswordReset: true
EnablePasswordRetrieval: false
MaxInvalidPasswordAttempts: 5
MinRequiredNonAlphanumericCharacters: 0
MinRequiredPasswordLength: 6
PasswordAttemptWindow: 10
PasswordFormat: Function evaluation was aborted.
PasswordStrengthRegularExpression: Cannot evaluate expression because debugging information has been optimized away .
RequiresQuestionAndAnswer: Cannot evaluate expression because debugging information has been optimized away .
RequiresUniqueEmail: Cannot evaluate expression because debugging information has been optimized away .
Обновление 2
Это просто случайно начало работать, что означает, что я что-то изменил, но не могу вспомнить, что это было. Глупый мозг. Я приму единственный опубликованный ответ и обновлю его, если выясню, в чем проблема.
type="Members.Providers.MembersProvider"
полностью количественно определенным, поместив сборку в конец и посмотрев, как это работает? - person amarsuperstar   schedule 03.01.2011