构造函数注入在 TYPO3 Extbase 中如何工作?
How does constructor injection work in TYPO3 Extbase?
我刚刚意识到 TYPO3 Extbase 可以(在某些情况下?)注入依赖项,即使您在调用时没有将它们传递给构造函数,例如$objectManager->get(Foo::class)
?我很困惑这是如何以及何时工作的。自己看源码也找不到答案
看看\TYPO3\CMS\Extbase\Object\Container\Container::getConstructorArguments()
。
它的工作原理如下:
如果
- 调用
ObjectManager->get()
和 时未提供参数
- 没有默认值(在构造函数签名中,即设置
$argumentInformation['defaultValue']
时)和
- 所需的参数是 class(即设置
$argumentInformation['dependency']
时)
然后这个 class 将被实例化并作为参数提供给构造函数调用
它在 Extbase Framework 中的很多 类 中都有效。您只需要在声明上方的属性上添加@inject 注解即可。
/**
* myRepository
*
* @var \TGM\Extension\Domain\Repository\MyRepository
* @inject
*/
protected $myRepository= NULL;
这在 undko 告诉的依赖项下工作,例如 ActionControllers、模型、存储库、CommandController 等。
我刚刚意识到 TYPO3 Extbase 可以(在某些情况下?)注入依赖项,即使您在调用时没有将它们传递给构造函数,例如$objectManager->get(Foo::class)
?我很困惑这是如何以及何时工作的。自己看源码也找不到答案
看看\TYPO3\CMS\Extbase\Object\Container\Container::getConstructorArguments()
。
它的工作原理如下:
如果
- 调用
ObjectManager->get()
和 时未提供参数
- 没有默认值(在构造函数签名中,即设置
$argumentInformation['defaultValue']
时)和 - 所需的参数是 class(即设置
$argumentInformation['dependency']
时)
然后这个 class 将被实例化并作为参数提供给构造函数调用
它在 Extbase Framework 中的很多 类 中都有效。您只需要在声明上方的属性上添加@inject 注解即可。
/**
* myRepository
*
* @var \TGM\Extension\Domain\Repository\MyRepository
* @inject
*/
protected $myRepository= NULL;
这在 undko 告诉的依赖项下工作,例如 ActionControllers、模型、存储库、CommandController 等。