Func<拥有<T>> vs Func<T> 依赖项



我知道Func<T>Func<Owned<T>>不同,我知道如何注入每种类型的依赖项。然而,我经常感到困惑,什么时候我更喜欢一个而不是另一个?

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

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

  • 控制器从请求生存期范围中解析
  • 调用Func<T>将从请求生存期范围中解析T
  • 当请求生存期作用域被释放时,控制器和任何T实例都将与请求作用域一起被释放

Owned<T>表示您明确负责处理T实例。CCD_ 12将从生存期范围中获得一个CCD_。

  • 控制器从请求生存期范围中解析
  • 调用Func<Owned<T>>将从请求生存期范围中解析Owned<T>
  • 当请求生存期作用域被释放时,控制器被释放,但Owned<T>实例未被释放。您需要在控制器或应用程序代码中的其他地方进行某种清理

Owned<T>只有在您想控制处理时间的情况下才真正有趣。如果你不关心或不希望终身范围处理为你处理它,那就没有意思了。

最新更新