his / container
服务容器的标准接口。
Requires
- hhvm: ^4.0
- hhvm/hhvm-autoload: ^2.0|^3.0
This package is auto-updated.
Last update: 2024-08-24 01:08:25 UTC
README
容器接口
本文档描述了依赖注入容器的通用接口。
ContainerInterface
设定的目标是标准化框架和库如何使用容器来获取对象和参数(在本文档的其余部分中称为条目)。
本文档中“必须”、“禁止”、“必需”、“应当”、“不应当”、“推荐”、“可能”、“可选”等关键词的用法,应按照RFC 2119进行解释。
本文档中“实现者”一词是指在实际的依赖注入相关库或框架中实现ContainerInterface
的人。依赖注入容器(DIC)的使用者称为用户。
规范
1.1 基础知识
-
His\Container\ContainerInterface
提供了两个方法:get
和has
。 -
get
需要一个强制参数:条目类型。它必须是一个typename
。对get的调用必须返回类型实现,如果容器不知道该类型,则抛出异常。对同一类型的连续两次get调用应该返回相同的值。然而,根据实现者设计和/或用户配置,可能返回不同的值,因此用户不应该依赖于在连续两次调用中获取相同的值。虽然ContainerInterface
在get()
中只定义了一个强制参数,但实现者可以接受额外的可选参数。 -
has
需要一个唯一的参数:条目类型。如果容器知道条目类型,则返回true;如果不知道,则返回false。has($service)
返回true并不意味着get($service)
不会抛出异常。然而,这意味着get($service)
不会抛出NotFoundExceptionInterface
异常。
1.2 异常
容器直接抛出的异常必须实现His\Container\Exception\ContainerExceptionInterface
。
调用get方法并传入一个不存在的service
应该抛出His\Container\Exception\NotFoundExceptionInterface
异常。
1.3 其他特性
本节描述了可以添加到容器中的其他特性。容器不必须实现这些特性以符合ContainerInterface
。
1.3.1 委托查找功能
委托查找功能的目标是允许多个容器共享条目。实现此功能的容器可以在其他容器中执行依赖查找。
实现此功能的容器将与其他容器提供更高的互操作性。因此,实现此功能是推荐的。
实现此功能的容器
- 必须实现ContainerInterface
- 必须提供一种方式来注册一个委托容器(使用构造函数参数、设置器或任何可能的方式)。委托容器必须实现ContainerInterface。
当容器配置为使用委托容器进行依赖项
- 对get方法的调用仅应返回容器中的条目。如果条目不是容器的一部分,则应抛出异常(如ContainerInterface请求的)。
- 对has方法的调用仅应在条目是容器的一部分时返回true。如果条目不是容器的一部分,则应返回false。
重要!默认情况下,应仅在委托容器上执行查找,而不是在容器本身上。
然而,容器允许为特殊条目提供异常情况,并提供一种方法来查找相同的容器(或另一个容器)而不是委托容器。