【发布时间】:2015-05-04 20:22:58
【问题描述】:
问题 - Ninject 内核总是返回新实例,即使它们的范围是请求。
-我将 OWIN 与 SystemWeb 主机包一起使用以允许我使用 IIS。
-该项目依赖于一个 API 应用程序,该应用程序安装了所有必要的 Ninject/owin 库。
app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);
-在转换为 OWIN 之前,一切都按预期工作。
-只创建一个内核实例。
-注册了一些全局过滤器,它们在请求范围的对象上设置某些属性。
public override void OnActionExecuting(HttpActionContext actionContext)
{
var accountService = Startup.Kernel.Get<IAccountService>();
// some changes to accountService etc.
-当管道中的其他过滤器尝试获取IAccountService 的实例时,它们总是返回一个新实例。
根据我自己的研究工作,这似乎是一个已知问题。任何想法,将不胜感激。谢谢。
【问题讨论】:
-
如果
HttpContext.Current是null.InRequestScope()的行为类似于.InTransientScope()。我不喜欢这种行为(我认为它应该抛出异常),但它就是这样。不过,我不知道你的情况是什么触发因素 - 所以你可能需要调查为什么没有HttpContext。 -
@BatteryBackupUnit 假设
HttpContext为空,我不确定我能做些什么。允许应用程序在 IIS 上运行的 SystemWeb 主机包表示它使用 ASP.NET 管道,该管道应设置为HttpContext。注意,没有项目引用 System.Web.dll。明天我会通过添加它来检查HttpContext是否为空。
标签: dependency-injection ninject owin