我知道Func<T>
不同于Func<Owned<T>>
而且我知道如何注入(inject)每种类型的依赖项。但是,我经常感到困惑,我什么时候更喜欢一个而不是另一个?
假设,我有一个遵循 MVP 模式的应用程序,我想注入(inject)一个 View PrintView
.然后,我应该根据什么决定将 View 注入(inject)为 Func<PrintView>
或 Func<Owned<PrintView>>
?
最佳答案
Func<T>
将解决生命周期范围内的项目,该项目将在生命周期范围被释放时处理。例如,在 MVC Controller 的情况下:
- Controller 从请求生命周期范围内得到解决。
- 调用
Func<T>
将解决T
来自请求生命周期范围。 - 处理请求生命周期范围时, Controller 和任何
T
实例将在请求范围内处理。
Owned<T>
表示您明确承担处置 T
的责任。实例。 Func<Owned<T>>
会得到 Owned<T>
来自生命周期范围。
- Controller 从请求生命周期范围内得到解决。
- 调用
Func<Owned<T>>
将解决Owned<T>
来自请求生命周期范围。 - 当处理请求生命周期范围时, Controller 被处理但是
Owned<T>
实例未处理。您需要自己在 Controller 或应用程序代码的其他地方进行某种清理。
Owned<T>
如果您想控制处理事物的时间,这真的很有趣。如果您不关心或希望生命周期范围处置为您处理,那没有意思。
关于c# - Func<Owned<T>> 与 Func<T> 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984172/