jf/container

PSR-11 依赖容器

1.0.0 2024-09-12 20:08 UTC

This package is auto-updated.

Last update: 2024-09-12 18:08:58 UTC


README

PSR-11 依赖容器。

安装

Composer

本项目使用Composer作为依赖管理器,可按照项目官方文档文档中的说明进行安装。

要使用此包管理器安装 jf/container 包,需要执行以下命令:

composer require jf/container

依赖

当项目安装时,还将安装以下依赖项

版本
jf/assert^3.1
psr/container^2.0

版本控制

本项目可以使用 git 进行安装。首先需要克隆项目,然后安装依赖项。

git clone https://www.gitlab.com/jfphp/jfContainer.git
cd jfContainer
composer install

配置

容器的配置是一个映射,以接口名称为键,实现该接口的类为值。也可以指定一个可调用的键,该可调用负责返回所需的实例或返回一个结果,该结果用于选择一个类或另一个类。

function isLogged() : bool
{
    return true;
}

$container = Container::fromConfig([
    'classnames' => [
        IApp::class     => MyApp::class,     // <-- Se devuelve MyApp
        IDatbase::class => fn() => new Db(), // <-- Se ejecuta la función que devuelve Db.
        IUser::class    => [                 // <-- Interfaz a resolver
            'isLogged' => [                  // <-- Callable a ejecutar
                Guest::class: false,         // <-- `Guest` se devuelve si el resultado de `isLogged` es `false`.
                User::class:  true           // <-- `User` se devuelve si el resultado de `isLogged` es `true`.
            ],
            DefaulClass::class               // <-- Si isLogged no devolviera `false` o `true` se usaría esa clase.
        ]
    ]
]);
assert($container->get(IApp::class) instanceof MyApp);
assert($container[IDatabase::class] instanceof Db);   // Se puede usar notación de array
assert($container->get(IUser::class) instanceof User);

可用文件

名称描述
jf\Container\Container实现 Psr\Container\ContainerInterface 接口的依赖注入容器。
jf\Container\Exception\Container容器通用异常。
jf\Container\Exception\NotFound当找不到容器值标识符时抛出的异常。
jf\Container\Exception\Type当检测到方法参数的某些值不正确时抛出的异常。
jf\Container\Parameters构建函数或方法的参数值。
jf\Container\Resolver\AResolver用于容器中标识符的解算器的基础类。
jf\Container\Resolver\Closure使用反射解析实例。
jf\Container\Resolver\Interfaces构建一个实例,确定它是否是接口以及建议的类是否实现该接口。
jf\Container\Resolver\Reflection使用反射解析实例。
jf\Container\Resolver\Singleton检查类是否由包 jf/base 提供的单例,并返回它。

接口

名称描述
jf\Container\Resolver\IResolver用于命名解算器的接口。