ASP.NET MVC3自定义成员资格提供程序 - 指定的成员资格提供程序名称无效

3Da*_*ave 3 c# membership-provider asp.net-mvc-3

我正在实现一个自定义成员资格提供程序,在创建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>
Run Code Online (Sandbox Code Playgroud)

从我的自定义User类创建MembershipUser对象时:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

(我意识到我可能只是从MembershipUser继承我的User类,但它已经是现有类层次结构的一部分.老实说,我认为这是我第一次遇到多重继承的合法需求!)

我的感觉是new MembershipUser(...)providerName参数应该与设置的匹配web.config,但是,因为它们已经匹配,所以我不知道如何继续.

有没有方便的方法来获取代码中的活动成员资格提供程序的名称?

我开始认为使用内置会员系统是过度杀伤,而且比它的价值更麻烦.

编辑 不确定它是否相关,但自定义成员资格提供程序类位于类库中,而不是主WAP项目中.

更新 此处是System.Web.Security.Membership.ProviderVS2010命令窗口中显示的对象内容:

>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 .
Run Code Online (Sandbox Code Playgroud)

更新2

这只是随机开始工作,这意味着我改变了一些但不记得它是什么.愚蠢的大脑.如果我弄清楚问题是什么,我会接受已发布的唯一答案并更新.

And*_*rry 6

我使用Membership.Provider.Name来获取正确的name参数

    public static MembershipUser GetUserFromEntity(this UserEntity userEntity)
    {
        return new MembershipUser(
                Membership.Provider.Name, 
                userEntity.Username,
                userEntity.PartitionKey,
                userEntity.Email,
                userEntity.PasswordQuestion,
                userEntity.Comment,
                userEntity.IsApproved,
                userEntity.IsLockedOut,
                userEntity.CreationDate,
                userEntity.LastLoginDate,
                userEntity.LastActivityDate,
                userEntity.LastPasswordChangedDate,
                userEntity.LastLockedOutDate
            );
    }
Run Code Online (Sandbox Code Playgroud)