我试图在不是控制器的一个类中访问Microsoft.AspNetCore.Identity.SignInManager。
在Startup.ConfigureServices()中,我有:
services.AddIdentity<IdentityUser, IdentityRole>();
在我的课堂上,我有:
public class Auth : IAuth
{
...
private readonly SignInManager<IdentityUser> _signInManager;
public Auth(..., SignInManager<IdentityUser> signInManager)
{
}
}
我得到这个异常:
处理请求时发生未处理的异常。 InvalidOperationException:无法解析类型的服务 “ Microsoft.AspNetCore.Identity.IUserStore
1[Microsoft.AspNetCore.Identity.IdentityUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.AspNetUserManager
1 [Microsoft.AspNetCore.Identity.IdentityUser]”。
注意,我什至没有在构造函数中引用传递的SignInManager
对象(为了简化起见,我已经删除了该对象)。如果我从构造函数中删除SignInManager
参数,一切正常。
我在网上看到的所有相关示例最终都是这样的情况:对SignInManager
的调用中AddIdentity()
的指定用户数据类型与构造函数参数中的用户数据类型不匹配,但我的代码中不是这种情况。
阅读文章和示例代码使这看起来像是一个简单的任务。我的构造函数的其他依赖项注入参数工作正常,只是如果尝试注入RoleManager
时会遇到相同的问题(除了异常消息稍有不同)。
答案 0 :(得分:3)
虽然添加了Identity,但尚未配置任何数据存储。在docs中,您应该执行以下操作:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
但是,如果您使用的是ASP.Net Core 2.1,请使用更新的版本:
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
答案 1 :(得分:-1)
如果您使用的是asp.net core 3.18版本,请使用下面的用户
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();