caridea / container
一个依赖注入库的小虾米
3.0.1
2018-01-06 17:29 UTC
Requires
- php: >=7.1.0
- caridea/event: ^3.0.0
- psr/container: ^1.0
Requires (Dev)
- phpunit/phpunit: ^6.0.0
Provides
- psr/container-implementation: 1.0.0
README
Caridea是一个小巧的PHP应用程序库。当你只需要一些辅助而无需完整框架时,这个小家伙就是你的选择。
这是一个符合PSR-11规范的依赖注入容器。
安装
您可以使用Composer安装此库
$ composer require caridea/container
- 此项目的master分支(版本3.x)需要PHP 7.1,并依赖于
caridea/event
。 - 此项目的2.x版本需要PHP 7.0,并依赖于
caridea/event
。 - 此项目的1.x版本需要PHP 5.5,并依赖于
caridea/event
。
兼容性
此库的发布将遵循语义化版本控制。
我们的代码旨在遵守PSR-1、PSR-2和PSR-4规范。如果您发现任何与规范兼容性问题,请发送拉取请求!
概述
- 《Caridea\Container\Properties》类旨在为可能用作其他组件设置的标量配置值。
- 《Caridea\Container\Objects》类允许使用急切、延迟和原型对象。
- 它还实现了《Caridea\Event\Publisher》,并将事件广播到任何实现《Caridea\Event\Listener》的受管理对象。
- 《Caridea\Container\EmptyContainer》类是一个空的、无操作的容器。
您可以通过名称和类型检索包含的对象!
文档
示例
仅提供几个快速示例。
配置和依赖
$config = [ 'db.uri' => 'mongodb://127.0.0.1:27017', 'mail.host' => '192.168.1.100' ]; $properties = new \Caridea\Container\Properties($config); $objects = \Caridea\Container\Objects::builder() ->eager('mongoClient', 'MongoClient', function($c){ return new \MongoClient($c->get('db.uri')); }) ->lazy('mailService', 'My\Mail\Service', function($c){ return new \My\Mail\Service($c->('mail.host')); }) ->lazy('userService', 'My\User\Service', function($c){ return new \My\User\Service($c->get('mongoClient'), $c->get('objectStorage')); }) ->proto('objectStorage', 'SplObjectStorage', function($c){ return new \SplObjectStorage(); }) ->build($properties); $userService = $objects->get('userService');
父级代理
您可以将对象容器嵌套。例如,您可以使用一个包含服务对象的容器和一个包含Web控制器的子容器。
$services = \Caridea\Container\Objects::builder() ->eager('blogService', 'My\Blog\Service', function($c){ return new \My\Blog\Service(); }) ->build(); $controllers = \Caridea\Container\Objects::builder() ->eager('blogController', 'My\Blog\Controller', function($c){ return new \My\Blog\Controller($c->get('blogService')); }) ->build($services); $controllers = $controllers->getByType('My\Blog\Controller'); // ['blogController' => BlogController]
事件
$objects = \Caridea\Container\Objects::builder() ->eager('eventListener', 'My\Cool\EventListener', function($c){ // we are assuming that this class implements Caridea\Event\Listener return new \My\Cool\EventListener(); }) ->build(); // assuming that CustomEvent implements Caridea\Event\Event $objects->publish(new CustomEvent()); // Here, the eventListener object will have its ->notify() method invoked with the CustomEvent
从《Objects》容器返回的任何实现《\Caridea\Event\PublisherAware》的对象将通过《setPublisher》方法接收到容器。
容器感知
从《Objects》容器返回的任何实现《\Caridea\Container\ContainerAware》的对象将通过《setContainer》方法接收到容器。我们提供了一个特质来简化这个过程。
class MyContainerAware implements \Caridea\Container\ContainerAware { use \Caridea\Container\ContainerSetter; public function __construct() { $this->container = new \Caridea\Container\EmptyContainer(); } }