ultra-lite/container

7.0.2 2021-05-09 15:53 UTC

README

Build Status Scrutinizer Code Quality Latest Stable Version MIT Licence

logo 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