jasny/autowire

此包已被弃用且不再维护。未建议替代包。

PSR-11 容器的自动装配

v1.2.2 2020-04-19 06:11 UTC

This package is auto-updated.

Last update: 2023-05-29 23:47:21 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Packagist Stable Version Packagist License

实例化对象(而不是使用 new),自动确定依赖项并从 PSR-11 容器中获取它们。

安装

composer require jasny/autowire

使用

使用反射确定类型构造函数参数类型的 ReflectionAutowire 实现。

class Foo
{
    public function __construct(ColorInterface $color)
    {
        // ...
    }
}

使用自动装配创建新的 Foo 对象

use Jasny\Autowire\ReflectionAutowire();

$autowire = new ReflectionAutowire($container);

$foo = $autowire->instantiate(Foo::class);
// OR
$foo = $autowire(Foo::class);

可选参数

如果参数可能为 null,则在没有容器条目的情况下将其设置为 null

class Foo
{
    public function __construct(?ColorInterface $color)
    {
        // ...
    }
}

文档注释

它还解析 文档注释,并可以从 @param 获取条目名称。条目名称必须是描述的第一部分,并且用双引号包围。

class Bar
{
    /**
     * Class constructor
     *
     * @param string              $color       "config:bar_color"
     * @param ConnectionInterface $connection  "db_connections.default"
     */
    public function __construct(string $color, ConnectionInterface $connection)
    {
        // ...
    }
}

@param 的类型不考虑。如果类型是单个接口(或类),则没有理由不在方法参数中使用类型提示。解析它们很困难,因为这需要将类转换为完全限定类名(FQCN),这需要查看命名空间和 use 语句。

这个库故意不支持属性或方法的自动装配。请显式地在容器函数中调用这些方法或使用抽象工厂。

未装配的参数

instantiate() 中的额外参数将直接传递给构造函数。不会对这些参数应用自动装配。

class Bar
{
    /**
     * Class constructor
     *
     * @param string              $color       A color
     * @param ConnectionInterface $connection  "db_connections.default"
     */
    public function __construct(string $color, ConnectionInterface $connection)
    {
        // ...
    }
}
use Jasny\Autowire\ReflectionAutowire();

$autowire = new ReflectionAutowire($container);

$foo = $autowire->instantiate(Foo::class, 'blue');

构造函数必须以这些参数开始。无法选择性地选择需要自动装配的参数。