heyday / symfony-autoinject
允许在 Symfony DI 中进行自动注入
该软件包的规范存储库似乎已消失,因此软件包已被冻结。
Requires
- php: >=5.4.0
- symfony/dependency-injection: ~2.4
Requires (Dev)
- phpunit/phpunit: ~4.0
- symfony/config: ~2.4
This package is auto-updated.
Last update: 2024-04-29 03:18:04 UTC
README
Symfony AutoInject 为 Symfony 依赖注入提供了可选的服务自动注入。
安装(使用 composer)
$ composer require heyday/symfony-autoinject
使用方法
通过两个服务标签 "autoinject" 和 "autoinject.provides" 实现自动注入的选项
标签的使用方法如下
"autoinject"
示例: { name: autoinject }
示例: { name: autoinject, arguments: true, setter: true, adder: true }
当 "all" 设置为 true 或未提供额外参数时,以下设置均适用
当 "arguments" 设置为 true 时,编译器传递将尝试查找服务参数,如果找到则提供,否则报错。无法自动注入的参数需要手动提供。
“setter”、“arguments” 和 "adder" 都是可选的
当 "setter" 设置为 true 时,编译器传递将尝试找到与类上找到的 setter 参数匹配的提供的服务
当 "adder" 设置为 true 时,编译器传递将尝试找到与类上找到的 adder 方法参数匹配的服务,并将为找到的每个服务添加一个方法调用到 adder 上
"autoinject.provides"
示例: { name: autoinject.provides }
示例: { name: autoinject.provides, interfaces: true, classes: true }
当 "all" 设置为 true 或未提供额外参数时,以下设置均适用
“interfaces” 和 "class" 都是可选的
当 "interfaces" 设置为 true 时,编译器传递将服务注册为提供实现该类的所有接口的实例,因此当在参数、setter 和 adder 中遇到接口时,提供的服务将被提供
当 "classes" 设置为 true 时,编译器传递将服务注册为提供该类及其父类的实例,因此当在参数、setter 或 add 中遇到相同类型的类时,提供的服务将被提供
汇总所有内容
构造函数注入
类
class Service { } class Service2 { protected $service; public function __construct(Service $s) { $this->service = $s; } }
配置
services: my_service: class: Service tags: - { name: "autoinject.provides" } my_service2: class: Service2 tags: - { name: "autoinject" }
在这个例子中,my_service
提供了一个 Service
类型的服务实例,而 my_service2
请求自动注入。
这些标签导致编译器传递看到 my_service2
正在请求自动注入,它有一个期望 Service
实例的构造函数,并且有一个由 my_service
提供的 Service
实例。自动注入是可以解决的,并且容器被配置为通过构造函数注入将 my_service
提供给 my_service2
。
单元测试
$ composer install --dev
$ vendor/bin/phpunit