在 Autofac 中共享依赖实例的正确方法是什么?

What is the correct way to share dependency instances in Autofac?

我有三个 类,比方说,ABC,因此:

我如何配置容器以通过一次调用 Resolve<A>() 正确连接这些东西?

这就是生命周期作用域的用途。如果你将某个东西注册为单个实例,它就存在于根生命周期范围内,并且所有东西都共享它。如果您在每个生命周期范围内注册为实例,则在同一范围内解析的所有内容都将共享同一实例。 Tons and tons of doc on this topic including examples.

当然,它可以变得更复杂。您可以使用手动创建的共享实例注册 lambda;您可以使用 Owned<T> 为单个组件创建一个很小的生命周期范围……同样,大量文档。我建议您自己做一些实验以获得良好的工作知识。

如何管理范围由您决定。 You may get some ideas from this doc on handling per-request lifetime scopes. 在具有自定义要求的自定义应用程序中,显然不能 "prescriptive guidance." 有些人将工作单元包装在生命周期范围内。有些人将其留给集成包,只使用提供的 request-level 生命周期范围。

  • 如果您创建了生命周期作用域,则由您来清理它。 Autofac 不会为您做这些。
  • 如果集成包创建范围(例如,网络应用程序集成创建 per-request 范围),该包将清理它。如果这样做,您可能 运行 因过早处理范围而陷入麻烦。