构造函数注入如何在TYPO3 Extbase中工作?

时间:2017-03-07 10:57:54

标签: typo3 extbase

我刚刚意识到TYPO3 Extbase可以(在某些情况下?)注入依赖关系,即使你在调用例如你没有将它们传递给构造函数时也是如此$objectManager->get(Foo::class)?我很困惑这是如何以及何时起作用的。我通过阅读源代码找不到答案。

2 个答案:

答案 0 :(得分:3)

查看\TYPO3\CMS\Extbase\Object\Container\Container::getConstructorArguments()

它的工作原理如下:

如果

    调用ObjectManager->get()和时未提供
  • 参数
  • 没有默认值(在构造函数签名中,设置为$argumentInformation['defaultValue']时)和
  • 必需参数是一个类(设置为$argumentInformation['dependency']时)

然后这个类将被实例化并作为参数提供给构造函数调用

答案 1 :(得分:2)

它在Extbase Framework中的很多类中都有效。您只需将@inject注释添加到声明上方的属性中。

/**
     * myRepository
     *
     * @var \TGM\Extension\Domain\Repository\MyRepository
     * @inject
     */
    protected $myRepository= NULL;

这可以在诸如ActionControllers,Models,Repositories,CommandController之类的undko告知的依赖项下工作。