> Magento2中文手册 > di.xml文件

di.xml文件

概述

di.xml 文件配置 依赖 注入 对象管理器.

区域和应用入口点

每个模块可以有一个全局和区域特定 di.xml 文件. Magento 2读取系统中定义的所有di.xml配置文件合并在一起通过添加所有节点。

作为一般规则,特定区域的di.xml文件应该配置为表示层依赖,和你的模块的全局di.xml文件应该配置附属的依赖。

Magento 2加载配置在以下几个阶段 :

  1. Initial(初始) (app/etc/di.xml)
  2. Global(全局) (<模块目录>/etc/di.xml)
  3. 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)
  • 依赖注入