public AccountController(IUserStore<ApplicationUser> userStore)
{
//uncommenting the following line, uses the correct context, but
//unit testing fails to work, as it is overwritten, so I need to use IoC
//to inject
//userStore = new UserStore<ApplicationUser>(new ApplicationDbContext());
UserManager = new UserManager<ApplicationUser>(userStore);
我的ninject绑定应该是什么样的?我可以进行编译的唯一内容如下所示,但这并没有得到正确的上下文。
kernel.Bind<IUserStore<ApplicationUser>>().To<UserStore<ApplicationUser>>();
是绑定到某个东西,但不是在注释掉的行中使用的正确上下文
答案 0 :(得分:2)
尝试使用ConstructorArgument
kernel.Bind<IUserStore<ApplicationUser>()
.To<UserStore<ApplicationUser>>()
.WithConstructorArgument(new ConstructorArgument("context", new ApplicationDbContext())
<强>可是... 强>
实际上,您应该还通过绑定UserStore<ApplicationUser>
在您的ApplicationDbContext
中注入依赖关系。然后,框架将为您构建整个图:
kernel.Bind<ApplicationDbContext>().ToSelf()
答案 1 :(得分:0)
从cvbarros回答我们提出以下内容:
kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
kernel.Bind<IUserStore<ApplicationUser>>()
.To<UserStore<ApplicationUser>>()
.WithConstructorArgument("context", context => kernel.Get<ApplicationDbContext>());
这允许注入ApplicationDbContext
和/或注入UserManager
。它还允许UserManager
从依赖注入器获取ApplicationDbContext
,而不是创建新实例。
注意,此代码位于/App_Start/NinjectWebCommon.cs文件
中