Parable DI 是一个微型的依赖注入容器

1.0.0 2021-03-12 08:19 UTC

This package is auto-updated.

Last update: 2024-09-12 23:05:10 UTC


README

Workflow Status Latest Stable Version Latest Unstable Version License

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();

上述情况也可以通过实例化和存储 ClassWithThatInterfaceThatInterface 下来解决。

示例用法:需要依赖注入容器本身的类,如果需要动态 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 许可证。