Ответы:
What case We use di.xml ?
Давайте рассмотрим пример из клиентского модуля Magento 2.
1.Preference
<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" />
Вы можете создать класс customModel для CustomerManagement и внести изменения. Система предпочтений класса как замена системы переписывания классов.
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
. Также мы можем использовать Аргументы для замены существующего аргумента.
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)
которая находится в классе журнала.
4 виртуальных типа
Создание виртуального типа похоже на создание подкласса для существующего класса.
Для получения дополнительной информации, пожалуйста, ознакомьтесь с практическими примерами, которые я упомянул в качестве ссылок от Алана, на практике вы можете получить более четкий опыт.
Надеюсь это поможет.... :)