0

我有三个类,比如说,ABC所以:

  • A取决于 和 的B实例C
  • B取决于 ; 的一个C实例
  • 两者都A需要B共享C.

如何配置容器以通过一次调用正确连接事物Resolve<A>()

4

1 回答 1

3

这就是生命周期范围的用途。如果您将某些内容注册为单个实例,则它位于根生命周期范围内,并且所有内容都共享它。如果您在每个生命周期范围内注册为实例,则在同一范围内解析的所有内容都将共享同一个实例。关于这个主题的大量文档,包括示例。

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

如何管理范围取决于您。你可能会从这个文档中得到一些关于处理每个请求生命周期范围的想法。在具有自定义需求的自定义应用中,显然不可能有“规范性指导”。有些人将工作单元包装在生命周期范围内。有些人把它留给集成包,只使用提供的请求级生命周期范围。

  • 如果您创建一个生命周期范围,则由您来清理它。Autofac 不会为您做到这一点。
  • 如果集成包创建范围(例如,Web 应用程序集成创建每个请求的范围),该包将清理它。如果你这样做,你可能会因为过早地处理示波器而遇到麻烦。
于 2019-05-17T13:48:21.550 回答