MVC5,OWIN和Ninject - GetOwinContext问题

时间:2015-02-09 02:13:01

标签: asp.net-mvc-5 ninject

我有一个正在进行OwinStartup的MVC5项目,我正在使用Ninject.MVC5,Ninject.Web.Common.OwinHost等。

我有NinjectWebCommon bootstrapping DI,事情进展顺利。直到我开始玩身份代码。

我需要发出密码重置令牌,这需要一个DataProtectionProvider。没问题,ApplicationUserManager在Create方法中连接起来,在Startup.Auth.cs启动期间绑定到OwinContext:

public void ConfigureAuth(IAppBuilder app)
{
    app.CreatePerOwinContext(ApplicationDbContext.Create);
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    ...
}

在我的NinjectWebCommon中,我有以下注册:

kernel.Bind<IDataContext>()
    .ToMethod(ctx => HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>())
    .InRequestScope();

kernel.Bind<IApplicationUserManager>()
    .ToMethod(ctx => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>())
    .InRequestScope();

我遇到的问题是令牌未被发出。为什么我的问题不是什么?好吧,如果我使用Create self获取ApplicationUserManager的实例并使用它,那么事情就会完美无缺。

接下来在我的牌照上报告了用户创建错误。连字符不在用户名中工作。在同一个ApplicationUserManager.Create方法中,UserValidator代码是否覆盖了默认的AllowOnlyAlphanumericUserNames值。

同样,如果我使用自己创建的依赖项,它会按预期工作。这似乎表明Ninject注入的依赖关系并不是使用ApplicationUserManager.Create版本。

我猜这与调用有关:HttpContext.Current.GetOwinContext ??

在注册我的解析器时,为了注入依赖于owin上下文或我需要做的其他事情,我需要做些什么吗?

我在这里看到了其他问题,显示了UseNinjectMiddleware和UseNinjectWebApi。我尝试了这种方法,但没有运气,没有注入任何东西......

非常感谢任何帮助!

0 个答案:

没有答案