dispify / weaver
带有自动配置和自动绑定的简单依赖注入容器
Requires
- php: ^7.1
- psr/container: ^1.0@dev
Requires (Dev)
- dispify/class_aliases: dev-master
- phpunit/phpunit: ^7.5
Suggests
- dispify/class_aliases: For autowiring by class aliases
Provides
This package is auto-updated.
Last update: 2024-09-05 20:20:46 UTC
README
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 兼容,因此当您获取或检查服务是否存在时,您可以传递任何字符串作为服务的标识符。但是,您不能使用随机字符串作为标识符注册服务。允许类名或接口。