yuloh/container

此包已被弃用且不再维护。未建议替代包。

轻量级兼容 container-interop 的依赖注入容器

v1.0.0 2017-04-20 18:16 UTC

This package is auto-updated.

Last update: 2021-11-23 07:21:29 UTC


README

Latest Version on Packagist Software License Build Status

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