我有一个正在进行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。我尝试了这种方法,但没有运气,没有注入任何东西......
非常感谢任何帮助!