Kephas 中的 AmbientServices 和 CompositionContext 有什么区别?

What is the difference between AmbientServices and CompositionContext in Kephas?

据我观察,他们做的事情几乎相同,以 IoC/DI 的形式提供服务。但是,IAmbientServices 有一个类型为 ICompositionContext 的成员。我真的不明白它们两者之间的区别,为什么它们以这种方式聚合?

简洁的答案是:ambient services 包含在 构建 IoC/DI/composition 容器之前 注册的服务,而 composition context 是根IoC/DI 的容器,它本身是一个注册到 ambient services.

的服务

附带说明一下,在 ambient services 中注册的所有服务稍后也会在 DI 容器中自动注册,包括 IAmbientServices,因此它们也可用于组合。

环境服务示例:

  • 日志管理器:记录器的提供者。
  • type loader: 从程序集中加载类型。
  • 配置存储:提供主要配置设置。

根据一般经验,更喜欢使用在 DI 容器中注册的服务,您很少需要环境服务。