northwoods / container
Auryn 依赖注入器的容器包装器
3.2.0
2018-09-20 13:55 UTC
Requires
- php: >=7.1
- container-interop/container-interop: 1.2.0
- psr/container: ^1.0
- rdlowrey/auryn: ^1.1
Requires (Dev)
- eloquent/phony-phpunit: ^4.0
- eloquent/phpstan-phony: ^0.2.0
- phpstan/phpstan: ^0.10.1
- phpunit/phpunit: ^7.0.3
- squizlabs/php_codesniffer: ^3.2
- zendframework/zend-container-config-test: ^0.2.0
Provides
README
Auryn 很棒,那么当包需要它时,为什么不使用它作为容器呢?
注意: 这与不使用 Auryn 作为服务定位器的理念完全相反。此包仅适用于希望使用需要服务定位器的包的 Auryn 用户。
尝试遵守 PSR-1、PSR-2、PSR-4 和 PSR-11 标准。
安装
composer require northwoods/container
使用
use Auryn\Injector; use Northwoods\Container\InjectorContainer; use Psr\Container\ContainerInterface; // Make an Injector and configure it. $injector = new Injector(); // Optional: Declare a single container instance. $injector->share(ContainerInterface::class); // Use InjectorContainer as the implementation of ContainerInterface. $injector->alias(ContainerInterface::class, InjectorContainer::class); // InjectorContainer will wrap this Injector instance. $injector->define(InjectorContainer::class, [':injector' => $injector]);
配置
此包提供了一个 InjectorBuilder
,可用于使用独立的类配置 Auryn。构建器接受一个配置对象列表,并将每个配置应用于注入器。
use Northwoods\Container\Config\ContainerConfig; use Northwoods\Container\InjectorBuilder; $builder = new InjectorBuilder([ new ContainerConfig(), ]);
如果您希望注入器实例化配置类,请使用 LazyInjectorBuilder
use Northwoods\Container\Config\ContainerConfig; use Northwoods\Container\LazyInjectorBuilder; $builder = new LazyInjectorBuilder([ ContainerConfig::class, ]);
然后可以使用构建器创建一个 Injector
实例
$injector = $builder->build(); $container = $injector->make(ContainerInterface::class);
注意: 也可以将现有的 Auryn 实例提供给 build()
方法。
Zend Service Manager 兼容性
此包与 Zend Expressive 容器配置 兼容
use Northwoods\Container\Zend\Config; use Northwoods\Container\Zend\ContainerFactory; $factory = new ContainerFactory(); $container = $factory(new Config( require 'path/to/services.php', ));
注意: 以这种方式配置的所有注入都将被共享!
也可以将现有的 Injector
传递给 ContainerFactory
$factory = new ContainerFactory($injector);
这可以与 InjectorBuilder
或 LazyInjectorBuilder
结合使用,以应用配置,如 define()
调用。
标识符
PSR-11 不要求容器标识符必须是类名,而 Auryn 则要求。Auryn 中此规则的唯一例外是 类别名 可以是任何内容。这些容器 "服务名称" 必须解析为类,并将需要被别名化。
例如,一个包可能需要在容器中有一个 config
条目,该条目旨在解析为数组。这可以通过创建一个创建 ArrayObject
实例的代理来实现
use ArrayObject; use Auryn\Injector; use Northwoods\Container\InjectorContainer; // Share a global "config" array as an object $injector->share('config')->delegate('config', function () { return new ArrayObject(require 'path/to/config.php'); }); // Create the container $container = new InjectorContainer($injector);
现在每当调用 $container->get('config')
时,都会返回 ArrayObject
。
示例
更多示例可在 examples/
目录中找到。
许可证
MIT