带有ninject:BeginScope的asp.net web api依赖关系解析程序

本文关键字:依赖 api 关系 程序 web net ninject BeginScope asp 带有 | 更新日期: 2023-09-27 18:25:42

我使用本文为asp.net web api创建了ninject依赖解析程序,它运行良好。但我有两个问题:

  1. BeginScope方法需要什么?在asp.net mvc依赖解析程序中没有这种方法,而且工作正常
  2. 内核的目的是什么。BeginBlock()方法?我从来没有用过

带有ninject:BeginScope的asp.net web api依赖关系解析程序

通常,Ninject不处理已创建对象的处理,而是在对象超出范围时由垃圾收集器处理处理。垃圾收集器处理的问题是它是不确定的,我们不知道什么时候会发生!这可能对数据库连接等稀缺资源不利。

BeginScope和Kernel.BeginBlock的思想很像C#语言中的using()块。它强制清理Ninject在作用域块末尾创建的任何对象。这些物体的处置将是决定性的,所有物体的寿命都将尽可能短。

当涉及到ASP.NET MVC时,如果您使用Ninject.MVC5 nuget包,它将注册一个http模块,该模块在请求结束时处理请求范围中的所有Ninject创建的类型。因此,不需要在控制器中创建和管理作用域块。

我相信ASP.NET WebAPI的Ninject包也会以同样的方式运行,但很抱歉我没有使用它的经验

我以前考虑过这些问题,另一种方法是将控制器注入工厂,创建您试图管理的一次性类型。然后在您的控制器中自己构造资源,并使用普通的using()块控制其生存期。