Respuestas:
What case We use di.xml ?
Tomemos un ejemplo rápido del módulo de cliente Magento 2.
1. referencia
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
Código anterior, cuando alguien le pide que cree una instancia Magento\Customer\Api\AddressRepositoryInterface
, creará una instancia de un objeto Magento \ Customer \ Model \ ResourceModel \ AddressRepository (el atributo type).
La configuración de preferencia de clase no es solo para interfaces, también podemos cambiar las clases reales.
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
Puede crear la clase 'customModel' para 'CustomerManagement' y hacer los cambios. Sistema de preferencia de clase como un reemplazo para el sistema de reescritura de clase.
http://alanstorm.com/magento_2_object_manager_preferences
2. Argumentos
<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
<arguments>
<argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
</arguments>
</type>
En el código anterior, estamos enviando un objeto como argumento, estamos diciendo sistema para insertar la clase "Proxy" como un objeto con el nombre de groupManagement
. Además, también podemos usar Argumentos para reemplazar el argumento existente.
http://alanstorm.com/magento_2_object_manager_argument_replacement
3. Complemento
<type name="Magento\Customer\Model\ResourceModel\Visitor">
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>
En el código anterior, public function clean($object)
en la clase visitante se llama a la función pública afterClean(Visitor $subject, $logResourceModel)
que está en la clase Log.
4 tipos virtuales
Crear un tipo virtual es algo así como crear una subclase para una clase existente.
Para obtener más notas, consulte los ejemplos prácticos que mencioné como enlaces de Alan; en la práctica, puede obtener una experiencia más clara.
Espero que esto ayude.... :)