如何在构造函数中使用注入的对象?

时间:2015-04-28 09:41:49

标签: typo3 extbase

我的Extbase扩展中有一个服务类,并希望使用ObjectManager在构造函数中创建一个对象的实例。

@Component(metatype = true, immediate = true)
@Service
public class SightlyDemo2Adapter implements AdapterFactory {
    @Property(name = "adapters")
    protected static final String[] ADAPTER_CLASSES = {SightlyDemo2.class.getName()};
    @Property(name = "adaptables")
    protected static final String[] ADAPTABLE_CLASSES = {Resource.class.getName()};
    @Override
    public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
        if (adaptable instanceof Resource) {
            SightlyDemo2 comp = new SightlyDemo2();
            return (AdapterType) comp;
        }
        return null;
    }
}

不幸的是,这并没有因错误 SightlyDemo2 obj = resource.adaptTo(SightlyDemo2.class); 而失败,因为注入的类似乎在构造函数中不可用。如何在构造函数中使用注入的类?

2 个答案:

答案 0 :(得分:6)

为了实现这一点,我可以使用所谓的构造函数注入。 ObjectManagerInterface被定义为构造函数的参数,然后由Extbase自动注入:

/**
 * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
 * @inject
 */
protected $objectManager;

public function __construct() {
    $this->standaloneView = $this->objectManager->get('TYPO3\CMS\Fluid\View\StandaloneView');
    $this->standaloneView->setFormat('html');
}

答案 1 :(得分:2)

作为lorenz答案的替代方案,您可以使用生命周期方法initializeObject()。它将在依赖注入完成后调用。