SignInManager依赖项注入在ASP.NET Core 2中失败

时间:2018-09-25 16:14:40

标签: c# asp.net-core asp.net-identity

我试图在不是控制器的一个类中访问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时会遇到相同的问题(除了异常消息稍有不同)。

2 个答案:

答案 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>();