c# - Func<Owned<T>> 与 Func<T> 依赖关系

标签 c# dependency-injection autofac

我知道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/

相关文章:

c# - 使用正则表达式来拆分带有变量的方程 C#

c# - 无法将类型 'double' 隐式转换为 'int'

c# - 将文本项目符号添加到 C# 窗体

c# - 在不重新编译整个应用程序的情况下升级依赖的 DLL

java - 从用户主目录导入资源

java - Spring:@Resource 注入(inject)在 JDK9 下停止工作

java - Dagger 2 范围和子组件

asp.net - 如何让 Autofac 在 Orchard CMS 中执行属性注入(inject)

asp.net-web-api - 使用 Autofac 将 NLog 注入(inject) Web Api Controller

wcf - 带 wcf 的 Autofac