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


magento-dn.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容