问题 - 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
的实例,它们总是返回一个新实例。根据我自己的研究工作,这似乎是一个已知问题。任何想法,将不胜感激。谢谢。
最佳答案
我见过类似的问题,也许这就是你的情况。InRequestScope
在以下情况下不起作用:
带有 OWIN 的 Web API 独立组件 .该程序集具有 Ninject 和 Web API,并且 OWIN 安装了它。
空的 ASP.Net web 项目,其中 只是引用了之前的程序集 . ASP.Net Web 项目没有安装 Web API 或 Ninject,它只有允许 OWIN 托管在 ASP.Net 之上的包。
在那个设置中,Ninject 似乎工作得很好;除了 InRequestScope 被忽略并始终解析对象的不同实例。
问题是 VS 不会将所有需要的程序集复制到结果目录中,因为它们没有被应用程序直接引用,也没有被 OWIN 程序集使用,而只是由 Ninject 动态加载。
要解决此问题,只需 NuGet Ninject.Extensions.ContextPreservation在您的 ASP.Net Web 项目中。
也许这只是您的问题或类似。看看Ninject Extensions并尝试确定您需要的未添加到结果目录中的扩展名。
关于dependency-injection - Ninject Owin 请求范围静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039271/