ultra-lite / container
7.0.2
2021-05-09 15:53 UTC
Requires
- php: ^7.4 || ^8.0
- psr/container: ^1.0
Requires (Dev)
- behat/behat: ^3.8
- phpspec/phpspec: ^7.0
- phpunit/phpunit: ^9.5
README
Ultra-Lite Container
一个超轻量级的依赖注入容器。Ultra-Lite 容器遵循 PSR-11 标准。(旧版本支持 container-interop。)
使用匿名函数作为工厂来指定你的服务。
此容器还支持代理查找模式,并附带一个基本的复合容器。
用法
单独设置服务
$container->set( 'service-id', function (\Psr\Container\ContainerInterface $container) { return new \stdClass(); } );
从配置文件设置服务
直接将工厂闭包添加到容器中,或使用如下配置文件。
示例配置文件
return [ 'service-id' => function (\Psr\Container\ContainerInterface $container) { return new \stdClass(); }, ];
使用配置文件
$container->configureFromFile('/wherever/config/di.php');
服务检索
如下从容器中获取服务
$object = $container->get('service-id');
检查服务是否存在
如下检查某个东西是否在容器中
$thingExists = $container->has('service-id');
与代理查找模式一起使用
如果你没有使用 Container-Interop 标准中的代理查找概念,请忽略这部分。如果你使用,你可以这样做
$container = new \UltraLite\Container\Container(); $delegateContainer = new \UltraLite\CompositeContainer\CompositeContainer(); // or any delegate container $compositeContainer->addContainer($container); // will vary for other composite containers $container->setDelegateContainer($myCompositeContainer);
Ultra-Lite Composite Container 是一个你可能希望使用的极轻量级代理容器。
当容器被请求使用 get()
获取服务时,它将返回该服务。它将复合容器传递给工厂闭包,因此你的服务的任何依赖项都将从这里检索。
替代方案
Ultra-Lite Container 最初受到 Pimple 的启发,它仍然是 PHP 中出色的 DI 容器。提供符合 Container-Interop 标准的包装器。另一个优秀项目 Picotainer 与此类似,主要区别在于依赖项是在容器实例化时定义的。
安装
composer require ultra-lite/container
贡献
欢迎贡献。
你可以使用以下命令运行测试:./vendor/bin/behat -c tests/behat/behat.yml
和 ./vendor/bin/phpspec r -c tests/phpspec/phpspec.yml
。