Func <Owned <T >> vs Func <T>依赖项

Gau*_*lot 4 c# dependency-injection autofac

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

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

Tra*_*lig 8

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

  • 控制器从请求生命周期范围中解析.
  • 调用将从请求生命周期范围中Func<T>解析a T.
  • 当处理请求生命周期范围时,控制器和任何T实例将与请求范围一起处理.

Owned<T>意味着你采取明确处置责任的的T实例.Func<Owned<T>>将从Owned<T>生命范围内获得一个.

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

Owned<T>如果你想控制事情处理的时间,那真的很有趣.如果你不关心或希望生命范围处理为你照顾它,那就没有意思了.