phly/zend-servicemanager-interop

为 zend-servicemanager 提供 service-provider 编译功能

dev-master / 1.0.x-dev 2016-04-19 17:56 UTC

This package is auto-updated.

Last update: 2024-09-11 14:16:51 UTC


README

Build Status Coverage Status

使用 container-interop service providerszend-servicemanager 结合。

安装

$ composer require phly/zend-servicemanager-interop

用法

use Zend\ServiceManager\Interop\ConfigInjector;
use Zend\ServiceManager\Interop\ProviderAggregate;
use Zend\ServiceManager\ServiceManager;

// Get a list of service provider classes and aggregate them:
$aggregate = new ProviderAggregate();
foreach (include 'providers.php' as $provider) {
    $aggregate->enqueue($provider);
}

// Create and inject a service manager with the providers:
$container = (new ConfigInjector())->inject($aggregate, new ServiceManager());

内部机制

  • ProviderAggregate 允许传递一个提供者的类名或实例。内部上,它从类名创建实例以确保从队列中取出的项目是已知的好类型。
  • ConfigInjector 将创建一个围绕工厂的闭包,以便 curry 参数并确保工厂与 zend-servicemanager 调用它们的方式没有冲突。
  • ConfigInjector 如果服务已经存在于 zend-servicemanager 实例中,则将工厂添加为代理。同样,工厂被包裹在一个闭包中以正确顺序 curry 参数。

与 service-provider 的不同之处

此实现进行了一些实验,并允许以下作为工厂参数

  • 任何有效的 PHP 可调用者
  • 解析为函数对象的 FQCN 参数