magento2中的依賴注入主要依靠于di.xml文件中的reference和type來定義黄刚。
通過在整個(gè)<MAGENTO_DIR>目錄的di.xml文件中查找<preference字符串,我們可以看到MAGENTO在其大部分模塊中使用了數(shù)百個(gè)首選項(xiàng)定義。
讓我們快速了解一下類型為Magento\Eav\Model\Attribute\Data\AbstractData的__construct方法之一:
public function __construct(\Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Psr\Log\LoggerInterface $logger, \Magento\Framework\Locale\ResolverInterface $localeResolver)
{
$this->_localeDate = $localeDate;
$this->_logger = $logger;
$this->_localeResolver = $localeResolver;
}
我們可以在<MAGENTO_DIR>/magento2-base/app/etc/di.xml文件中找到這些接口的首選項(xiàng)定義:
class Type {
protected $objectManager;
public
function __construct(\Magento\ Framework\ ObjectManagerInterface $objectManager) {
$this - > objectManager = $objectManager;
}
public function example() {
$this - > objectManager - > create(\Fully\ Qualified\ Class\ Name::class);
$this - > objectManager - > get(\Fully\ Qualified\ Class\ Name::class);\
Magento\ Framework\ App\ ObjectManager::getInstance() - > create(\Fully\ Qualified\ Class\ Name::class);\
Magento\ Framework\ App\ ObjectManager::getInstance() - > get(\Fully\ Qualified\ Class\ Name::class);
}
}
強(qiáng)烈反對(duì)直接使用objectManager瑟啃,因?yàn)樗梢苑乐构S類提供的類型驗(yàn)證和類型提示。通過在整個(gè)<MAGENTO_DIR>目錄的di.xml文件中查找<type字符串秸谢,我們可以看到MAGENTO在其大多數(shù)模塊中使用了一千多個(gè)類型定義愧捕。
查看Magento\Customer\Model\Visitor類的源代碼,我們可以看到它的構(gòu)造函數(shù)是由$ignoredUserAgents=[]數(shù)組定義的黍檩。前面的示例使用type元素注入具有給定數(shù)組值的ignoredUserAgents參數(shù)叉袍。
當(dāng)合并給定作用域的配置文件時(shí),具有相同名稱的數(shù)組參數(shù)將合并到一個(gè)新數(shù)組中刽酱。但是喳逛,如果以后通過更具體的作用域或通過代碼加載任何新配置,則新配置中的任何數(shù)組定義都將替換加載的配置棵里,而不是合并润文。
本文內(nèi)容來源于碼小課--magento專區(qū):