我使用this文章使用ninject为asp.net web api创建了依赖项解析器,它运行正常。但我有两个问题:
答案 0 :(得分:2)
通常,Ninject不处理已创建对象的处理,而是当对象超出范围时,处理由垃圾收集器处理。垃圾收集器处理的问题是它是不确定的,我们不知道什么时候会发生!这可能对数据库连接等稀缺资源不利。
BeginScope和Kernel.BeginBlock的想法很像C#语言中的using()块。它强制清除Ninject在范围块末尾创建的任何对象。然后处理这些物体将是确定性的,并且所有物体都将尽可能短暂。
对于ASP.NET MVC,如果使用Ninject.MVC5 nuget包,它将注册一个http模块,该模块在请求结束时处理请求范围内的所有Ninject创建的类型。因此,不需要在控制器内创建和管理范围块。
我相信ASP.NET WebAPI的Ninject包可以以相同的方式运行,但很抱歉我没有使用它。
我之前已经考虑过这些问题,另一种方法是向您的控制器注入工厂,这些工厂会创建您尝试管理的一次性类型。然后在您的控制器中自己构建资源并使用正常的using()
块控制其生命周期。