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