美文网首页
magento2中的依赖注入-参数注入

magento2中的依赖注入-参数注入

作者: 一团小糖糖 | 来源:发表于2023-07-22 13:31 被阅读0次

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专区:


magento-dn.png

相关文章

网友评论

      本文标题:magento2中的依赖注入-参数注入

      本文链接:https://www.haomeiwen.com/subject/ssyxpdtx.html