yiisoft/injector

PSR-11 兼容的注入器。执行可调用项并通过从给定的 DI 容器注入依赖项来创建实例。

1.2.0 2023-12-20 09:39 UTC

README

Yii

Yii 注入器


Latest Stable Version Total Downloads Build status Code Coverage Mutation testing badge static analysis type-coverage

一个基于自动装配和 PSR-11 兼容的依赖注入容器的依赖注入实现。

功能

  • 在调用函数和创建对象时注入依赖项
  • 与任何 PSR-11 兼容的依赖注入容器(DIC)一起工作
  • 接受作为数组传递的附加依赖项和参数
  • 允许在数组中以 参数名称 的形式传递参数
  • 通过 参数类型声明 从容器和传递的数组中解析对象类型依赖项
  • 解析 可变参数,例如 function (MyClass ...$a)

需求

  • PHP 7.4 或更高版本。

安装

可以使用 Composer 安装此包。

composer require yiisoft/injector

关于

注入器可以在调用函数和创建对象时自动解析和注入依赖项。

因此,它使用 Reflection 来分析要调用的函数的参数或要实例化的类的构造函数,然后尝试通过几种策略解析所有参数。

主要目的是在一个(强制性的)PSR-11 兼容的 依赖注入容器(DIC)中找到依赖对象——即声明为类名或接口的类型的对象参数。因此,容器必须使用类或接口名称作为 ID。

此外,还可以传递一个参数数组,也将扫描匹配的依赖项。为了使事情更加灵活(而不限于对象),该数组中的参数可以可选地使用函数参数名称作为键。这样,注入器基本上可以调用任何可调用项并创建任何对象,即使它使用对象依赖项和其他类型参数的混合。

基本示例

use Yiisoft\Injector\Injector;

// A function to call
$fn = function (\App\Foo $a, \App\Bar $b, int $c) { /* ... */ };

// Arbitrary PSR-11 compatible object container
$container = new \some\di\Container([
    'App\Foo' => new Foo(), // will be used as $a
]);

// Prepare the injector
$injector = new Injector($container);

// Use the injector to call the function and resolve dependencies
$result = $injector->invoke($fn, [
    'c' => 15,  // will be used as $c
    new Bar(),  // will be used as $b
]);

缓存反射对象

通过调用 withCacheReflections(true) 启用反射对象的缓存以提高性能

use Yiisoft\Injector\Injector;

$injector = (new Injector($container))
    ->withCacheReflections(true);

默认情况下,缓存是禁用的。

文档

如果您需要帮助或有问题,Yii 论坛 是一个好地方。您还可以查看其他 Yii 社区资源

许可

Yii 注入器是免费软件。它遵循BSD许可证条款发布。请参阅LICENSE获取更多信息。

Yii 软件维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack