为了尝试将Ninject与使用ASP.NET身份的新Web API 2项目一起使用,我遇到了一些奇怪的行为 . 我无法获取传递给CreatePerOwinContext()的回调以触发对Web API控制器的请求 . 对于MVC控制器,它们工作正常 .
重新创建的步骤:
-
文件 - >新的VS 2013 ASP.NET Web应用程序
-
检查MVC和WebAPI
-
在身份验证下选择个人
-
为Ninject,Ninject.Web.Common.OwinHost,Ninject.Web.WebApi.OwinHost和依赖包添加nuget包
-
按照guidance为您的Owin启用的应用配置ninject
-
在ApplicationUserManager.Create()中放置一个断点,然后在F5调试中放置一个断点
-
见证您的Home控制器的请求正常工作 - 断点被击中 . 向API控制器做一个小提琴请求 - 例如,api / Account / Register,并且根本不会调用回调
我不是一个ninject爱好者,所以我不确定这是我做错了还是Ninject OWIN扩展中的错误 . 我倾向于将OwinContext留在后面并简单地使用Ninject perHttpRequest作用域,但我不确定ASP.NET Identity系统是否会破坏 . 我听说可能有内部调用OwinContext.Get()如果我没有在OWIN上下文中保留东西会破坏 .
非常感谢任何人的想法 .
1 回答
我最终通过使用Ninject进行所有生命周期管理来解决这个问题 . 显然.CreatePerOwinContext()是stop gap solution,如果使用完整的DI工具则不需要 .
我唯一注意到的是,对于基于cookie的身份验证,ASP.NET身份将在OwinContext中查找其UserManager . 我正在使用基于令牌的身份验证,但我已经看到一些人继续将UserManager填入OwinContext .
我的Ninject绑定: