Func<Owned<T>>和Func<T>依赖关系

5

我知道 Func<T>Func<Owned<T>> 是不同的,我也知道如何注入每种类型的依赖。但是,我经常感到困惑,什么情况下应该优先选择其中之一?

假设,我有一个遵循 MVP 模式的应用程序,并且我想要注入一个视图 PrintView。那么,我应该根据什么样的标准来决定,我应该将视图注入为 Func<PrintView> 还是 Func<Owned<PrintView>>

1个回答

9

Func<T>将从生命周期范围中解析出一个项目,并在释放生命周期范围时处理该项目的清理。例如,在MVC控制器的情况下:

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

Owned<T>的意思是您需要明确地负责处理T实例的清理工作Func<Owned<T>>将从生命周期范围中获取一个Owned<T>

  • 控制器从请求生命周期范围中解析。
  • 调用Func<Owned<T>>将从请求生命周期范围中解析出一个Owned<T>
  • 当请求生命周期范围被处理完毕,控制器将被处理,但Owned<T>实例不会被处理。您需要自己在控制器或应用程序代码的其他地方进行清理。

Owned<T>仅在您希望控制处理时间时才有意义。如果您不关心或希望生命周期范围处理它,那么这并不重要。


在Visual Studio中有什么方法/工具可以监视我的组件的生命周期吗?谢谢! - Gaurav Gahlot
不过,如果你进行一些搜索,这里有一些关于如何记录各种Autofac事件何时被触发的问题。那可能会有所帮助。 - Travis Illig
好的。我认为现在这样就足够了。谢谢。 - Gaurav Gahlot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接