当我认为我从Magento 2缠绕DI系统时,出现了一些问题,并将其解包。
我在核心代码中看到了访问助手的不同方式。
例如,Magento\Catalog\Controller\Category::_initCategory
其中有:
if (!$this->_objectManager->get('Magento\Catalog\Helper\Category')->canShow($category)) {
return false;
}
但是在Magento\Catalog\Block\Category\View
帮助器中注入了构造函数
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Category $catalogLayer,
\Magento\Framework\Registry $registry,
\Magento\Catalog\Helper\Category $categoryHelper,
array $data = array()
) {
$this->_categoryHelper = $categoryHelper;
$this->_catalogLayer = $catalogLayer;
$this->_coreRegistry = $registry;
parent::__construct($context, $data);
}
这使我认为应该在控制器和块(和模型)中以不同的方式访问帮助程序,但是随后我找到了一个在构造函数中注入了帮助程序的控制器Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
。
请为我清除雾气。
什么时候应该使用DI objectManager
?什么时候应该使用DI ?为什么?
我已经读过这个问题:在Magento 2中实例化助手。这只是一个后续问题。