我的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);
而失败,因为注入的类似乎在构造函数中不可用。如何在构造函数中使用注入的类?
答案 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()
。它将在依赖注入完成后调用。