Ninject:绑定标识UserManager

时间:2014-11-26 08:42:42

标签: c# asp.net-mvc ninject

我的AuthenticationController遇到了问题,我使用Identity 2.0。 任务很简单,但是我无法理解Ninject及其绑定。

我想将UserManager绑定到UserStore和DBContext,但我无法弄清楚如何做到这一点。 此外,更重要的问题是我必须为哪个范围设置UserManager和UserStore的绑定。

另外,我在AuthenticationController中有这个方法:

private void UserValidator(UserManager<User> usermanager)
{
    usermanager.UserValidator = new UserValidator<User>(usermanager)
    {
        AllowOnlyAlphanumericUserNames = true
    };
}

我不想创建新的UserValidator并在其他方法(或构造函数)中调用此方法,而是在创建时将此方法与我的UserManager绑定。我怎么能用Ninject做到这一点?

1 个答案:

答案 0 :(得分:4)

UserManager,UserStore和DBContext正在创建依赖链,因此您必须键入类似的内容

kernel.Bind<IDBContext>().To<DBContext>().InRequestScope(); //It's good practice to use interface
kernel.Bind<DBContext>().ToSelf().InRequestScope(); //You can also do it this way
kernel.Bind<IUserStore<User>>().To<UserStore<User>>()
            .InRequestScope()
            .WithConstructorArgument("context", kernel.Get<IDBContext>());
kernel.Bind<UserManager<User>>().ToSelf()
            .InRequestScope();

我认为最好继续使用UserValidator的单独方法,因为它仅在注册新用户时使用。