当您转换为与Magento 2一起使用时, Magento 2依赖关系注入用于替换Magento 1.x Mage类。依赖关系注入设计模式创建了一个外部环境,您可以在其中注入依赖关系到对象中。因此,不再需要手动创建对象。即,当对象A调用对象或值B时,这意味着B是A的依赖项。
目录
Magento 2依赖反转原理
如果您正在使用Magento 2依赖注入,则应查看Magento 2依赖反转原理,因为该原理将限制高层和低级类之间的直接工作。那时,交互将通过低级类的接口作为抽象层实现。
具体来说,该di.xml
文件负责将接口依赖关系映射到首选实现类。可以说,借助Magento 2依赖反转原理,由于抽象层的存在,编码的依赖将大大降低。
对象管理器-依赖注入容器
对象管理器称为依赖注入容器,Magento 2服务类,其中包含并处理对象之间的依赖关系。在类构造过程中,对象管理器将注入di.xml
文件中定义的适当依赖项。
构造函数签名依赖性
在Magento 2中,类定义使用构造函数签名来获取信息(依赖项的类型和数量)。
编译依赖
与Magento 2依赖注入相关的所有信息都收集在一个类中,并通过代码编译器工具保存在文件中。然后,ObjectManager
它将获取此信息以在应用程序中生成具体对象。
Magento 2中使用的注射类型
Magento 2依赖注入包括两种类型:构造函数注入和方法注入。您可以查看以下代码片段,以了解有关它们的更多信息。
namespace Magento\Backend\Model\Menu;
class Builder
{
/**
* @param \Magento\Backend\Model\Menu\Item\Factory $menuItemFactory
* @param \Magento\Backend\Model\Menu $menu
*/
public function __construct(
Magento\Backend\Model\Menu\Item\Factory $menuItemFactory, // Service dependency
Magento\Backend\Model\Menu $menu // Service dependency
) {
$this->_itemFactory = $menuItemFactory;
$this->_menu = $menu;
}
public function processCommand(\Magento\Backend\Model\Menu\Builder\CommandAbstract $command) // API param
{
// processCommand Code
}
}
构造器注入
如上例所示,$menuItemFactory
和$menu
是将通过构造函数注入添加到对象的类的依赖项。此外,请记住,需要构造函数注入来声明对象的所有可选和必需。
方法注入
关于“方法注入”,当对象明确表示其方法之一的依赖项时,将使用它。就像在引用实例中进行跟踪一样,$command
依赖项是通过processCommand
方法传递给类的。
对象组
在Magento 2中,对象分为两组:可注射对象和不可注射(新的)对象。这些是什么?
可注射物体
关于可注入对象,您可以将其称为服务或对象,将在其构造函数中显示依赖关系,并由对象管理器通过di.xml
文件中的配置创建。您可以使用这些可注入对象在构造函数中请求其他可注入服务。
不可注射物体
不可注入(新的)对象在其构造函数中也公开依赖项时,与可注入的对象有点相似,但是,可允许新对象请求其他新对象,例如实体,值对象。另外,您不能要求可更新对象保留对可注射对象的引用。