我知道Func<T>
与Func<Owned<T>>
不同,我知道如何注入每种类型的依赖关系。但是,我经常感到困惑,因为我什么时候比较喜欢一个呢?
假设我有一个遵循MVP模式的应用程序,我想注入一个视图PrintView
。然后,基于什么理由我决定将视图注入Func<PrintView>
或Func<Owned<PrintView>>
?
答案 0 :(得分:8)
Func<T>
将解析生命周期范围中的项目,该范围将在释放生命周期范围时处理。例如,在MVC控制器的情况下:
Func<T>
将解析请求生命周期范围内的T
。T
实例将随请求范围一起处理。 Owned<T>
表示您明确承担了T
实例的处理的责任。 Func<Owned<T>>
将从生命周期范围内获得Owned<T>
。
Func<Owned<T>>
将解析请求生命周期范围内的Owned<T>
。Owned<T>
实例未处置。您需要在控制器或应用程序代码中的其他位置进行某种清理。 Owned<T>
真的很有趣,如果你想控制事情处理的时间。如果您不关心或希望生命范围处理能够为您处理,那就没有意义了。