我应该使用什么ninject绑定?

时间:2014-02-21 15:54:58

标签: c# ninject

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

是绑定到某个东西,但不是在注释掉的行中使用的正确上下文

2 个答案:

答案 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文件