我知道 Func<T>
和 Func<Owned<T>>
是不同的,我也知道如何注入每种类型的依赖。但是,我经常感到困惑,什么情况下应该优先选择其中之一?
假设,我有一个遵循 MVP 模式的应用程序,并且我想要注入一个视图 PrintView
。那么,我应该根据什么样的标准来决定,我应该将视图注入为 Func<PrintView>
还是 Func<Owned<PrintView>>
?
我知道 Func<T>
和 Func<Owned<T>>
是不同的,我也知道如何注入每种类型的依赖。但是,我经常感到困惑,什么情况下应该优先选择其中之一?
假设,我有一个遵循 MVP 模式的应用程序,并且我想要注入一个视图 PrintView
。那么,我应该根据什么样的标准来决定,我应该将视图注入为 Func<PrintView>
还是 Func<Owned<PrintView>>
?
Func<T>
将从生命周期范围中解析出一个项目,并在释放生命周期范围时处理该项目的清理。例如,在MVC控制器的情况下:
Func<T>
将从请求生命周期范围中解析出一个T
。T
实例都将与请求范围一起被处理。Owned<T>
的意思是您需要明确地负责处理T
实例的清理工作。Func<Owned<T>>
将从生命周期范围中获取一个Owned<T>
。
Func<Owned<T>>
将从请求生命周期范围中解析出一个Owned<T>
。Owned<T>
实例不会被处理。您需要自己在控制器或应用程序代码的其他地方进行清理。Owned<T>
仅在您希望控制处理时间时才有意义。如果您不关心或希望生命周期范围处理它,那么这并不重要。