yuloh / container
此包已被弃用且不再维护。未建议替代包。
轻量级兼容 container-interop 的依赖注入容器
v1.0.0
2017-04-20 18:16 UTC
Requires
- php: >=5.4.0
- psr/container: ^1.0
Requires (Dev)
- phpunit/phpunit: 4.*
- squizlabs/php_codesniffer: ~2.3
Provides
This package is auto-updated.
Last update: 2021-11-23 07:21:29 UTC
README
Container 是一个轻量级的依赖注入容器。它与 PSR-11 容器接口 兼容,因此您可以直接用于许多不同的项目。
该容器非常简单;它基本上是一个标识符 => 可调用映射的数组,可调用用于获取结果对象。
对依赖注入和容器不熟悉?我写了一篇 博客文章 解释依赖注入以及此容器的工作原理。
此包符合 PSR-1、PSR-2、PSR-4 和 PSR-11。
安装
通过 Composer
$ composer require yuloh/container
用法
添加条目
向容器添加条目非常简单。只需指定标识符作为第一个参数,将可调用作为第二个参数。
use Yuloh\Container\Container; $container = new Container(); $container->set(Psr\Log\LoggerInterface::class, function () { $logger = new Monolog\Logger(); $logger->pushHandler(new StreamHandler('error.log')); return $logger; });
闭包将接收容器作为其唯一参数,因此您可以使用容器解决条目的依赖项。
$container->set('db', function ($container) { $db = new Database(); $logger = $container->get(Psr\Log\LoggerInterface::class); $db->setLogger($logger); return $db; });
所有条目都是共享的(单例),这意味着条目将只解决一次并在后续调用中重复使用。
获取条目
要检查条目是否存在,请使用 has
。要获取条目,请使用 get
。如果您只是检索条目,则可以键入 Psr\Container\ContainerInterface
而不是实际的容器。
if ($container->has('db')) { $db = $container->get('db'); }
为什么还需要另一个容器?
现在有很多容器。我在做一个项目,需要一个轻量级的默认容器,但是找不到我想要的东西。这个容器
- 实现了 container-interop。
- 支持 PHP 5.4+
- 支持在运行时添加条目。
- 非常轻量,具有支持前三个目标所需的最小代码。
测试
$ composer test
$ composer cs