Answers:
What case We use di.xml ?
让我们以Magento 2客户模块为例。
1.偏好
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
上面的代码,当有人要求您实例化一个实例时Magento\Customer\Api\AddressRepositoryInterface
,它将实例化一个Magento \ Customer \ Model \ ResourceModel \ AddressRepository对象(type属性)。
类首选项配置不仅用于接口,我们还可以更改实际的类。
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
您可以为“ CustomerManagement”创建“ customModel”类并进行更改。使用类首选项系统替代类重写系统。
http://alanstorm.com/magento_2_object_manager_preferences
2.争论
<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
<arguments>
<argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
</arguments>
</type>
在上面的代码中,我们将对象作为参数发送,我们说的是系统将名称为的“ Proxy”类作为对象插入groupManagement
。另外,我们也可以使用Arguments替换现有参数。
http://alanstorm.com/magento_2_object_manager_argument_replacement
3.插件
<type name="Magento\Customer\Model\ResourceModel\Visitor">
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>
在上面的代码中, public function clean($object)
访问者类afterClean(Visitor $subject, $logResourceModel)
在Log类中的公共函数之后被调用。
4种虚拟类型
创建虚拟类型有点像为现有类创建子类。
有关更多注释,请阅读一些我作为Alan链接提到的实际示例,通过练习您可以获得更清晰的经验。
希望这可以帮助.... :)