di.xml 中接口的作用与 <type> 的区别
Difference between role of Interfaces and <type> in di.xml
我对 di.xml 中使用的接口 <preference>
和 <type>
属性的作用有一个疑问。在什么情况下我们应该使用 <preference>
和 <type>
?在逻辑实现方面是否存在任何实质性差异。
例如转到 app/code/Magento/Catalog/etc/di.xml,会有很多使用 <preference>
和 <type>
标签的实例。我们究竟如何区分它们?
期待听到想法。
<preference>
习惯于indicate which concrete class you want the DI framework to supply when that type is requested。
<type>
用于几个不同的事情,其中之一是提供或覆盖注入到具体类型的构造函数中的参数。 <type>
声明也是 used to declare plugins。
您在 <preference>
和 <type>
中看到一个接口的时间是为该接口定义插件的时间。 <type>
允许您在该对象类型上声明一个插件,无论它是具体的 class 还是接口。
示例来自 app/code/Magento/Catalog/etc/di.xml
:
<preference for="Magento\Catalog\Api\ProductRepositoryInterface" type="Magento\Catalog\Model\ProductRepository" />
...
<type name="Magento\Catalog\Api\ProductRepositoryInterface">
<plugin name="transactionWrapper" type="\Magento\Catalog\Model\Plugin\ProductRepository\TransactionWrapper" sortOrder="-1"/>
</type>
我对 di.xml 中使用的接口 <preference>
和 <type>
属性的作用有一个疑问。在什么情况下我们应该使用 <preference>
和 <type>
?在逻辑实现方面是否存在任何实质性差异。
例如转到 app/code/Magento/Catalog/etc/di.xml,会有很多使用 <preference>
和 <type>
标签的实例。我们究竟如何区分它们?
期待听到想法。
<preference>
习惯于indicate which concrete class you want the DI framework to supply when that type is requested。
<type>
用于几个不同的事情,其中之一是提供或覆盖注入到具体类型的构造函数中的参数。 <type>
声明也是 used to declare plugins。
您在 <preference>
和 <type>
中看到一个接口的时间是为该接口定义插件的时间。 <type>
允许您在该对象类型上声明一个插件,无论它是具体的 class 还是接口。
示例来自 app/code/Magento/Catalog/etc/di.xml
:
<preference for="Magento\Catalog\Api\ProductRepositoryInterface" type="Magento\Catalog\Model\ProductRepository" />
...
<type name="Magento\Catalog\Api\ProductRepositoryInterface">
<plugin name="transactionWrapper" type="\Magento\Catalog\Model\Plugin\ProductRepository\TransactionWrapper" sortOrder="-1"/>
</type>