dispify/weaver

带有自动配置和自动绑定的简单依赖注入容器

v1.0.0 2020-09-05 07:36 UTC

This package is auto-updated.

Last update: 2024-09-05 20:20:46 UTC


README

Build Status codecov GitHub license

Packagist PHP Version Support PSR-11 Support

Weaver

简单的依赖注入容器,具有自动配置和自动绑定。受 依赖注入组件 的启发。

这个库可以帮助您为模块测试配置许多服务。

入门

在项目中使用 Weaver 之前,将其添加到 composer.json 文件中

$ composer require dispify/weaver

用法

⚠️ 当您注册任何服务时,它将以指定的类名注册,而不是实现接口或类别名

⚠️ 当服务被实例化后,Weaver 将覆盖所有名称与实现接口或服务类别名相等的所有服务。

class A {}
class B {
    public function __construct(A $a) {}
}

$weaver = new \Dispify\Weaver\Weaver();
$weaver->weave(B::class, $arguments = []); // register dependency
$weaver->get(B::class); // instantiate and return object of B. The service of A is created via autowiring  

特性

全局共享参数 & 手动实例化的外部服务

预定义的参数和服务可以手动提供。任何标量值都将始终注册为命名参数。
任何对象都将注册为服务,其类名、父类名、实现接口以及声明的类别名(需要包含 "dispify/class_aliases" 包)

延迟实例化

当您注册任何服务时,您应该提供服务的类名和构造函数参数的数组。只有当此服务被其他服务或外部调用者请求时,才会实例化该服务。

参数数组可以是键值对数组或索引数组。

自动配置

当请求实例化服务时,第一个动作是通过反射确定构造函数的参数。Weaver 尝试通过现有数据(如参数、服务、共享参数或默认值)解决每个参数。

Weaver 使用以下方法解决确定的参数

  • 如果存在,从参数数组中按名称选择参数;
  • 如果存在,从参数数组中按索引选择参数;
  • 如果它是对象,则作为服务获取参数;
  • 如果存在,从共享参数数组中按名称选择参数;
  • 如果指定,则使用参数的默认值;

根据设计忽略可变参数。以后可能会改变。

自动绑定

当 Weaver 解决对象参数时,它会获取参数的类名的服务。

如果服务未注册,则 Weaver 尝试使用类名注册此服务。

⚠️ 如果类名不存在或指定了接口,则将引发异常。

然后 Weaver 通过延迟实例化的工作流程实例化此服务。

PSR-11 兼容性

Weaver 与 PSR-11 兼容,因此当您获取或检查服务是否存在时,您可以传递任何字符串作为服务的标识符。但是,您不能使用随机字符串作为标识符注册服务。允许类名或接口。