jf / container
1.0.0
2024-09-12 20:08 UTC
Requires
- jf/assert: ^3.1
- psr/container: ^2.0
Suggests
- jf/base: Para detectar las clases usadas como singleton
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 | 用于命名解算器的接口。 |