Jawaban:
What case We use di.xml ?
Mari kita ambil contoh cepat dari modul pelanggan Magento 2.
1.Preferensi
<preference for="Magento\Customer\Api\AddressRepositoryInterface"
type="Magento\Customer\Model\ResourceModel\AddressRepository" />
Kode di atas, Ketika seseorang meminta Anda untuk instantiate, Magento\Customer\Api\AddressRepositoryInterfaceitu akan instantiate objek Magento \ Pelanggan \ Model \ ResourceModel \ AddressRepository (atribut type).
Konfigurasi preferensi kelas bukan hanya untuk antarmuka kita dapat mengubah kelas yang sebenarnya juga.
<preference for="Magento\Customer\Model\CustomerManagement"
type="Magento\Customer\Model\customModel" />
Anda dapat membuat kelas 'customModel' untuk 'Manajemen Pelanggan' dan melakukan perubahan. Sistem preferensi kelas sebagai pengganti sistem penulisan ulang kelas.
http://alanstorm.com/magento_2_object_manager_preferences
2. Argumen
<type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
<arguments>
<argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
</arguments>
</type>
Dalam kode di atas, Kami mengirim objek sebagai argumen, kami mengatakan sistem untuk memasukkan kelas "Proxy" sebagai objek dengan nama groupManagement. Juga, kita dapat menggunakan Argumen untuk mengganti argumen yang ada juga.
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>
Dalam kode di atas, public function clean($object)di kelas pengunjung dipanggil setelah fungsi publik afterClean(Visitor $subject, $logResourceModel)yang ada di kelas Log.
4 Jenis Virtual
Membuat tipe virtual seperti membuat sub-kelas untuk kelas yang ada.
Untuk catatan lebih lanjut, silakan lihat contoh-contoh praktis yang saya sebutkan sebagai tautan dari Alan, dengan berlatih Anda bisa mendapatkan pengalaman yang lebih jelas.
Semoga ini membantu.... :)