di.xml文件
概述
di.xml
文件配置 依赖 注入 对象管理器.
区域和应用入口点
每个模块可以有一个全局和区域特定 di.xml
文件.
Magento 2读取系统中定义的所有di.xml配置文件合并在一起通过添加所有节点。
作为一般规则,特定区域的di.xml文件应该配置为表示层依赖,和你的模块的全局di.xml文件应该配置附属的依赖。
Magento 2加载配置在以下几个阶段 :
- Initial(初始) (
app/etc/di.xml
) - Global(全局) (
<模块目录>/etc/di.xml
) - Area-specific(特定区域) (
<模块目录>/etc/<area>/di.xml
)
在 bootstrapping(引导程序), 每个应用程序的入口点加载适当的 di.xml
文件在要求 area(区域)。
示例:
-
在
index.php
,\Magento\Framework\App\Http
类根据URL中提供的名称加载区域。 -
在
static.php
,\Magento\Framework\App\StaticResource
类还根据请求中的URL加载区域。 -
在
cron.php
,\Magento\Framework\App\Cron
类加载‘crontab’区域.
类型配置
类型配置描述对象的生命周期以及如何实例化它。
你可以在 di.xml
文件中配置节点的方式如下:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="moduleConfig" type="Magento\Core\Model\Config">
<arguments>
<argument name="type" xsi:type="string">system</argument>
</arguments>
</virtualType>
<type name="Magento\Core\Model\App">
<arguments>
<argument name="config" xsi:type="object">moduleConfig</argument>
</arguments>
</type>
</config>
上面的示例声明以下类型:
-
moduleConfig
: 扩展类型的继承类型Magento\Core\Model\Config
. -
Magento\Core\Model\App
: 此类型的所有实例都依赖moduleConfig
.
构造函数的参数
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Core\Model\Session">
<arguments>
<argument name="sessionName" xsi:type="string">adminhtml</argument>
</arguments>
</type>
</config>
参数类型
object
- 节点的格式:
-
<argument xsi:type="object">{typeName}</argument>
<argument xsi:type="object" shared="{shared}">{typeName}</argument>
string
- 节点的格式:
-
<argument xsi:type="string">{strValue}</argument>
<argument xsi:type="string" translate="true">{strValue}</argument>
boolean
- 节点的格式:
-
<argument xsi:type="boolean">{boolValue}</argument>
见下表:
Input Type | Data | Boolean Value |
---|---|---|
Boolean | true | true |
Boolean | false | false |
String | “true”* | true |
String | “false”* | false |
String | “1” | true |
String | “0” | false |
Integer | 1 | true |
Integer | 0 | false |
number
- 节点的格式:
-
<argument xsi:type="number">{numericValue}</argument>
init_parameter
- 节点的格式:
-
<argument xsi:type="init_parameter">{ConstAnt::NAME}</argument>
const
- 节点的格式:
-
<argument xsi:type="const">{Constant::NAME}</argument>
null
- 节点的格式:
-
<argument xsi:type="null"/>
array
- 节点的格式:
-
<argument xsi:type="array"> <item name="someKey" xsi:type="<type>">someVal</item> </argument>
示例:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Example\Type">
<arguments>
<!-- Pass simple string -->
<argument name="stringParam" xsi:type="string">someStringValue</argument>
<!-- Pass instance of Magento\Some\Type -->
<argument name="instanceParam" xsi:type="object">Magento\Some\Type</argument>
<!-- Pass true -->
<argument name="boolParam" xsi:type="boolean">1</argument>
<!-- Pass 1 -->
<argument name="intParam" xsi:type="number">1</argument>
<!-- Pass application init argument, named by constant value -->
<argument name="globalInitParam" xsi:type="init_parameter">Magento\Some\Class::SOME_CONSTANT</argument>
<!-- Pass constant value -->
<argument name="constantParam" xsi:type="const">Magento\Some\Class::SOME_CONSTANT</argument>
<!-- Pass null value -->
<argument name="optionalParam" xsi:type="null"/>
<!-- Pass array -->
<argument name="arrayParam" xsi:type="array">
<!-- First element is value of constant -->
<item name="firstElem" xsi:type="const">Magento\Some\Class::SOME_CONSTANT</item>
<!-- Second element is null -->
<item name="secondElem" xsi:type="null"/>
<!-- Third element is a subarray -->
<item name="thirdElem" xsi:type="array">
<!-- Subarray contains scalar value -->
<item name="scalarValue" xsi:type="string">ScalarValue</item>
<!-- and application init argument -->
<item name="globalArgument " xsi:type="init_parameter">Magento\Some\Class::SOME_CONSTANT</item>
</item>
</argument>
</arguments>
</type>
</config>
相关话题
- 对象管理器(ObjectManager)
- 依赖注入