尚未注册第 'AspNetCore.Identity.UserManager`1[AspNetCore.Identity.IdentityUser]' 类服务。使用自定义提供程序(网络核心 6)



我尝试实现自定义UserStore和自定义RoleStore

实现接口

Public Interface ICustomRoleStore     
Inherits IRoleStore(Of ApplcationRole)     
Overloads Sub Dispose()     
Overloads Function CreateAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)     
Overloads Function DeleteAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)     
Overloads Function FindByIdAsync(roleId As String, cancellationToken As CancellationToken) As Task(Of ApplcationRole)     
Overloads Function FindByNameAsync(normalizedRoleName As String, cancellationToken As CancellationToken) As Task(Of ApplcationRole)     
Overloads Function GetNormalizedRoleNameAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)     
Overloads Function GetRoleIdAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)     
Overloads Function GetRoleNameAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of String)     
Overloads Function SetNormalizedRoleNameAsync(role As ApplcationRole, normalizedName As String, cancellationToken As CancellationToken) As Task     
Overloads Function SetRoleNameAsync(role As ApplcationRole, roleName As String, cancellationToken As CancellationToken) As Task     
Overloads Function UpdateAsync(role As ApplcationRole, cancellationToken As CancellationToken) As Task(Of IdentityResult)     
End Interface

Public Interface ICustomUserStore
Inherits IUserStore(Of ApplicationUser)
Overloads Sub Dispose()
Overloads Function CreateAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function DeleteAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
Overloads Function FindByIdAsync(userId As String, cancellationToken As CancellationToken) As Task(Of ApplicationUser)
Overloads Function FindByNameAsync(normalizedUserName As String, cancellationToken As CancellationToken) As Task(Of ApplicationUser)
Overloads Function GetNormalizedUserNameAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetUserIdAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function GetUserNameAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of String)
Overloads Function SetNormalizedUserNameAsync(user As ApplicationUser, normalizedName As String, cancellationToken As CancellationToken) As Task
Overloads Function SetUserNameAsync(user As ApplicationUser, userName As String, cancellationToken As CancellationToken) As Task
Overloads Function UpdateAsync(user As ApplicationUser, cancellationToken As CancellationToken) As Task(Of IdentityResult)
End Interface

然后我用相同的方法添加身份

Builder.Services.AddIdentity(Of ApplicationUser, ApplcationRole).AddUserStore(Of CustomUserStore).AddRoleStore(Of CustomRoleStore)()

它看起来足以配置MS身份,但出乎意料的是,我收到了

InvalidOperationException:没有类型的服务"微软。AspNetCore。身份UserManager `1[Microsoft.AspNetCore.Identity.IdentityUser]'已注册。

我还尝试使用各种选项,如

Builder.Services.ConfigureApplicationCookie(Sub(options)
options.LoginPath = "/User/Login"
End Sub)

Builder.Services.Configure(Of IdentityOptions)(Sub(options)
'Password settings.
options.Password.RequireDigit = True
options.Password.RequireLowercase = True
options.Password.RequireNonAlphanumeric = True
options.Password.RequireUppercase = True
options.Password.RequiredLength = 6
options.Password.RequiredUniqueChars = 1
End Sub)

和其他选择,但我总是失败。我失去了什么?什么错误?

经过研究,我发现了这个问题的原因。

要查看的标准注射是

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

但因为我为ApplicationUser配置了服务,所以我必须以相同的方式创建这个注入

@using MyBackendApi.Models
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

相关内容

最新更新