【问题标题】:asp.net web api dependency resolver with ninject: BeginScope带有ninject的asp.net web api依赖解析器:BeginScope
【发布时间】:2014-10-04 17:11:28
【问题描述】:

我使用this 文章为asp.net web api 创建了带有ninject 的依赖解析器,它工作正常。但我有两个问题:

  1. BeginScope 方法需要什么? asp.net mvc依赖解析器中没有这个方法,运行正常;
  2. kernel.BeginBlock() 方法的用途是什么?我没用过。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-web-api dependency-injection ninject


    【解决方案1】:

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

    BeginScope 和 Kernel.BeginBlock 的思想很像 C# 语言中的 using() 块。它强制清除 Ninject 在范围块末尾创建的任何对象。然后,这些对象的处置将是确定性的,并且所有对象的寿命都将尽可能短。

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

    我相信 ASP.NET WebAPI 的 Ninject 包会以相同的方式运行,但抱歉我没有这方面的经验。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2018-10-19
      相关资源
      最近更新 更多