接口的角色与di.xml中的<type>之间的区别

时间:2015-09-28 12:52:25

标签: magento2

我有一个关于理解di.xml中使用的接口<preference><type>属性的查询。在哪些情况下,我们应该使用<preference><type>?在逻辑实现方面是否存在任何重大差异。

例如,转到app / code / Magento / Catalog / etc / di.xml,会有很多实例使用<preference><type>标签。我们究竟能如何区分它们?

期待听到想法。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

<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>允许您在该对象类型上声明一个插件,无论它是具体类还是接口。

来自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>