magento2的依赖注入使用了xml文件进行配置,很多学习magento2的小伙伴对于xml文件比较陌生,而且对于依赖注入的原理不是很清楚,而依赖注入在现代软件开发中是非常重要的。
本文件为大家讲解magento2中依赖注入比较重要的一个知识点,通过参数的方式实现magento2的依赖注入。
magento2中的依赖注入主要依靠于di.xml文件中的reference和type来定义。
通过在整个<MAGENTO_DIR>目录的di.xml文件中查找<preference字符串,我们可以看到MAGENTO在其大部分模块中使用了数百个首选项定义。
让我们快速了解一下类型为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文件中找到这些接口的首选项定义:
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);
}
}
强烈反对直接使用objectManager,因为它可以防止工厂类提供的类型验证和类型提示。通过在整个<MAGENTO_DIR>目录的di.xml文件中查找<type字符串,我们可以看到MAGENTO在其大多数模块中使用了一千多个类型定义。
查看Magento\Customer\Model\Visitor类的源代码,我们可以看到它的构造函数是由$ignoredUserAgents=[]数组定义的。前面的示例使用type元素注入具有给定数组值的ignoredUserAgents参数。
当合并给定作用域的配置文件时,具有相同名称的数组参数将合并到一个新数组中。但是,如果以后通过更具体的作用域或通过代码加载任何新配置,则新配置中的任何数组定义都将替换加载的配置,而不是合并。
本文内容来源于码小课–magento专区:
码小课提供magento2全栈开发教程,是学习magento2的最佳选择。