您可能会因多种原因而收到此错误。这不是一个有保证的修复,但希望它能为那里的人节省一些时间。出现此错误通常是因为您的应用程序使用的是默认 DbContext,而不是您打算使用的 DbContext。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection") {}
}
该项目生成此自定义 DbContext。您应该确保“DefaultConnection”是使用此类的项目的 Web.config 中的连接字符串或连接名称。
这是我的连接字符串。请注意,该名称与上面 DbContext 中的名称相同:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-AspnetIdentitySample-10_8_3;Integrated Security=True" providerName="System.Data.SqlClient" />
确保连接字符串已设置后,我们需要检查 NinjectWebCommon 中的绑定。
kernel.Bind<ApplicationDbContext>().ToSelf();
kernel.Bind<IUserStore<ApplicationUser>>().To<UserStore<ApplicationUser>>().WithConstructorArgument("context", kernel.Get<ApplicationDbContext>());
kernel.Bind<UserManager<ApplicationUser>>().ToSelf();
这是我在我的应用程序中发现错误的地方。第一行不是必需的,但是个好主意。第二行是最重要的。
UserStore 有 2 个构造函数。第一个是空的。第二个有 1 个参数,DbContext 上下文。 Ninject 的构造函数参数区分大小写,并且必须命名为“context”,Ninject 才能正确选择此构造函数。