thecodingmachine/container-discovery

允许发现容器对象

dev-master 2015-11-30 17:23 UTC

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.