Parable DI 是一个微型的依赖注入容器
1.0.0
2021-03-12 08:19 UTC
Requires
- php: >=8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
- vimeo/psalm: ^4.6
README
Parable DI 是一个不废话的依赖注入容器,能完成工作。
安装
需要 Php 8.0+ 和 composer。
$ composer require parable-php/di
用法
简单情况的示例用法
use \Parable\Di\Container; $container = new Container(); $app = $container->get(App::class); $app->run();
示例用法:将接口提示的依赖项映射
use \Parable\Di\Container; $container = new Container(); class App { public function __construct(ThatInterface $classWithThatInterface) { } public function run() { echo "Run? RUN!"; } } $container->map(ThatInterface::class, ClassWithThatInterface::class); $app = $container->get(App::class); $app->run();
上述情况也可以通过实例化和存储 ClassWithThatInterface
在 ThatInterface
下来解决。
示例用法:需要依赖注入容器本身的类,如果需要动态 DI
use \Parable\Di\Container; $container = new Container(); class App { public $container; public function __construct( public Container $container ) {} } $app = $container->get(App::class); var_dump($app->container->has(App::class)); // output: bool(true)
对于所有其他用例,只需检查 tests/ContainerTest.php
中的测试。
API
get(string $name): object
- 创建或获取实例has(string $name): bool
- 检查实例是否已存储assertHas(string $name): void
- 检查并抛出异常,如果实例未存储build(string $name): object
- 使用存储的依赖项构建实例,但不存储buildAll(string $name): object
- 使用新依赖项构建实例,但不存储map(string $requested, string $replacement): void
- 允许预先定义当检索或构建请求的名称时要实例化的替换类。用于懒加载类,即接口依赖项。unmap(string $requested): void
- 移除映射 并 清除任何先前映射的实例getDependenciesFor(string $name, [int $storedDependencies]): array
- 获取实例的依赖项,使用存储(默认)或新依赖项store(object $instance, [string $name]): void
- 在名称下存储实例,或默认使用实例名称clear(string $name): void
- 清除实例clearExcept(array $keep): void
- 清除所有除提供的名称之外的内容,如果要保持的任何实例不存在,则抛出异常clearAll(): void
- 清除所有
其中 object
指的是任何类的任何实例。
贡献
欢迎提出建议、错误报告或一般反馈。请使用 GitHub 问题报告和拉取请求,或在 devvoh.com 上找到我。
许可
所有 Parable 组件都是开源软件,许可协议为 MIT 许可证。