FUNC <资<T>&GT; vs Func <t>依赖

时间:2017-02-01 15:57:43

标签: c# dependency-injection autofac

我知道Func<T>Func<Owned<T>>不同,我知道如何注入每种类型的依赖关系。但是,我经常感到困惑,因为我什么时候比较喜欢一个呢?

假设我有一个遵循MVP模式的应用程序,我想注入一个视图PrintView。然后,基于什么理由我决定将视图注入Func<PrintView>Func<Owned<PrintView>>

1 个答案:

答案 0 :(得分:8)

Func<T>将解析生命周期范围中的项目,该范围将在释放生命周期范围时处理。例如,在MVC控制器的情况下:

  • Controller从请求生命周期范围内解析。
  • 调用Func<T>将解析请求生命周期范围内的T
  • 处理请求生命周期范围时,控制器和任何T实例将随请求范围一起处理。

Owned<T>表示您明确承担了T实例的处理的责任。 Func<Owned<T>>将从生命周期范围内获得Owned<T>

  • Controller从请求生命周期范围内解析。
  • 调用Func<Owned<T>>将解析请求生命周期范围内的Owned<T>
  • 处理请求生命周期范围时,将处理控制器,但Owned<T>实例未处置。您需要在控制器或应用程序代码中的其他位置进行某种清理。

Owned<T>真的很有趣,如果你想控制事情处理的时间。如果您不关心或希望生命范围处理能够为您处理,那就没有意义了。