2017-02-01 82 views
3

我知道Func<T>Func<Owned<T>>不同,我知道如何注入每种类型的依赖关系。然而,我经常感到困惑,因为我在什么时候比较喜欢一个呢?Func <Owned<T>> vs Func <T> dependency

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

回答

6

Func<T>将解析生命周期范围中的项目,该项目将在生命周期范围发布时处理。例如,MVC控制器的情况:

  • 控制器从请求生存期范围解析。
  • 调用Func<T>将从请求生存期范围中解析出T
  • 处理请求生命周期范围时,控制器和任何T实例将与请求范围一起处理。

Owned<T>意味着你正在服用明确为T实例的处置责任。 Func<Owned<T>>将从生命周期范围获得Owned<T>

  • 控制器从请求生存期范围解析。
  • 调用Func<Owned<T>>将从请求生存期范围中解析出Owned<T>
  • 处理请求使用期限范围时,控制器被处理,但Owned<T>实例为未处置。您需要自己在控制器或应用程序代码中的某处进行某种清理。

Owned<T>真的只有在你想控制事物处置的时间时才有意思。如果你不在乎或者希望终生处理范围的处置能够为你处理,那就没有意思了。

+0

在Visual Studio中有什么方法/工具可以监视组件的生命周期吗?谢谢! –

+0

不,但是如果你做了一些搜索,那么在这里有关于如何在引发各种Autofac事件时登录的问题。这可能有帮助。 –

+0

好的。我认为现在就足够了。谢谢。 –

相关问题