Respostas:
What case We use di.xml ?
Vamos dar um exemplo rápido do módulo do cliente Magento 2.
1. preferência
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
Acima do código, quando alguém solicitar uma instância, Magento\Customer\Api\AddressRepositoryInterface
ele instancia um objeto Magento \ Customer \ Model \ ResourceModel \ AddressRepository (o atributo type).
A configuração de preferências de classe não é apenas para interfaces, também podemos alterar as classes reais.
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
Você pode criar a classe 'customModel' para 'CustomerManagement' e fazer as alterações. Sistema de preferência de classe como um substituto para o sistema de reescrita de classe.
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>
No código acima, estamos enviando um objeto como argumento, estamos dizendo ao sistema para inserir a classe "Proxy" como um objeto com o nome de groupManagement
. Além disso, também podemos usar Argumentos para substituir o argumento existente.
http://alanstorm.com/magento_2_object_manager_argument_replacement
3. Plugin
<type name="Magento\Customer\Model\ResourceModel\Visitor">
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
</type>
No código acima, public function clean($object)
na classe visitante é chamado após a função pública afterClean(Visitor $subject, $logResourceModel)
que está na classe Log.
4 Tipos Virtuais
Criar um tipo virtual é como criar uma subclasse para uma classe existente.
Para mais informações, consulte os exemplos práticos que eu mencionei como links de Alan. Na prática, você pode obter uma experiência mais clara.
Espero que isto ajude.... :)