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)
 - 依赖注入