thecodingmachine / container-discovery
允许发现容器对象
dev-master
2015-11-30 17:23 UTC
Requires
Requires (Dev)
- puli/cli: ^1.0
This package is auto-updated.
Last update: 2024-09-06 23:46:40 UTC
README
此包包含一个接口和Puli绑定类型,用于自动发现容器。
简介
container-interop 定义了容器对象(ContainerInterface
)的通用接口。此包提出了一种用于生成容器对象的默认接口。
此工厂是静态的,并且可以被Puli通过类发现自动检测。
目标是允许组合容器自动检测并创建容器实例。
安装
composer require thecodingmachine/container-discovery@dev
此包遵循 SemVer 规范,并且将在次要版本之间实现完全向下兼容。
容器发现
此包的目标是使包能够自动发布或发现 容器。
要自动向您的应用程序提供 容器,我们使用 Puli的发现机制。
此包包含一个名为 container-interop/ContainerFactories
的Puli 绑定类型。此绑定类型应包含实现 ContainerFactoryInterface
接口的全限定类名。
提供容器
要提供容器,编写一个 ContainerFactory
,它将返回一个实现了 ContainerInterface
的容器实例。
例如(使用 Picotainer)
namespace My\Package; use Interop\Container\Factory\ContainerFactoryInterface; use Assembly\ArrayDefinitionProvider; class MyContainerFactory implements ContainerFactoryInterface { public static function buildContainer(ContainerInterface $rootContainer, Discovery $discovery) { return new Picotainer([ 'logger' => function() { new MyLogger(); }, $rootContainer ]); } }
一旦编写了类,使用Puli将其绑定到可用容器列表中
$ puli bind "My\\Package\\MyContainerFactory" container-interop/ContainerFactories
注意:按照惯例,您可以在绑定中添加一个“优先级”参数。默认优先级为0。优先级较低的先处理(因此,优先级较高的会覆盖优先级较低的)。
$ puli bind "My\\Package\\MyContainerFactory" container-interop/ContainerFactories --param priority=42
消费容器
在您的代码中,您可以使用以下方法找到所有 container-interop/ContainerFactories
绑定类型的类:
// $discovery is the Puli Discovery object. $factories = $discovery->findByType('container-interop/ContainerFactories'); // TODO: sample code to sort by priority.