corex/container

简单且不可变的依赖注入容器

2.2.0 2023-12-13 09:27 UTC

This package is auto-updated.

Last update: 2024-09-27 15:40:23 UTC


README

license build Code Coverage PHPStan Level

重大变更 - 此包已从头开始重写,以使其更加严格且易于使用。

  • 容器是不可变的。
  • 支持PSR-11容器接口。
  • 支持在定义上设置默认参数。

一些示例

创建一个未绑定的类。

$myClass = (new Container())->make(MyClass::class);

如果它们提前绑定,将解析类型提示。

创建一个带有绑定和参数的类。

$containerBuilder = new ContainerBuilder();

$containerBuilder->bind('myClass', MyClass::class)
    ->setArgument('firstname', 'Roger');

$container = new Container($containerBuilder);

$myClass = $container->make('myClass', [
    'lastname' => 'Moore'
]);

通过类创建类绑定。

$containerBuilder = new ContainerBuilder();

$containerBuilder->bindClass(MyClass::class);

$container = new Container($containerBuilder);
$myClass = $container->get(MyClass::class);

通过实现接口创建类绑定。

interface MyClassInterface
{
}

class MyClass implements MyClassInterface
{
}

$containerBuilder = new ContainerBuilder();

$containerBuilder->bindClassOnInterface(MyClass::class);

$container = new Container($containerBuilder);
$myClass = $container->get(MyClassInterface::class);

参数

参数将按照以下顺序解析

  1. 将类型提示ContainerInterface解析为容器的实例。
  2. 在定义上指定默认参数。
  3. 在构造函数/方法中指定默认参数。
  4. 在调用make()时指定参数,且尚未解析。