bcchicr/di-container

一个最小的PSR-11兼容的自动装配依赖注入容器

1.1.0 2024-03-08 15:56 UTC

This package is auto-updated.

Last update: 2024-09-06 00:41:07 UTC


README

一个符合PSR-11标准的简单依赖注入容器。实现了自动装配和缓存。

要求

  • PHP 8.2或更高版本

安装

通过Composer安装

composer require bcchicr/di-container

使用

创建容器

use Bcchicr\Container\Container;

$container = new Container();

注册依赖项

/**
 * Зарегистрировать вызываемое значение в качестве определения зависимости
 *
 * @param string $id
 * @param callable $callback
 * @return void
 */
$container->register($id, function(ContainerInterface $container) {
    return 'dependency';
});

/**
 * Зарегистрировать зависимость непосредственно
 *
 * @param string $id
 * @param mixed $instance
 * @return void
 */
$container->instance($id, 'instance');

检查从容器中获取依赖项的可能性

/**
 * Возвращает 'true` если зависимость с указанным ID может быть получена из контейнера
 *
 * @param string $id
 * @return bool
 */
$container->has($id);

从容器中获取依赖项

/**
 * Возвращает зависимость с указанным ID
 *
 * @param string $id
 * @return mixed
 * @throws Bcchicr\Container\Exception\NotFoundException Если ID неизвестен контейнеру
 * @throws Bcchicr\Container\Exception\ContainerGetException Если не получается получить зависимость из определения
 */
$container->get($id);

两次连续的具有相同ID的get()调用返回同一对象

$dep1 = $container->get($id);
$dep2 = $container->get($id);

$dep1 === $dep2 // true

实现了按类名自动装配对象

$dep1 = $container->get(SomeClass::class);

这只有在以下条件下才可能

  • 获取的对象的构造函数不包含参数
  • 获取的对象的构造函数参数具有默认值
  • 构造函数参数是可从容器中获取的对象(包括通过自动装配)