일부 클래스에서 종속성 주입이 di.xml
구체적인 클래스의 생성자에서 한 번 두 번 선언되는 이유를 이해하지 못합니다 .
에서 예를 들어 Magento\Backend\Model\Url
, 자사는 di.xml
DI를위한 유형의 집합이 정의 :
<type name="Magento\Backend\Model\Url">
<arguments>
<argument name="scopeResolver" xsi:type="object">
Magento\Backend\Model\Url\ScopeResolver</argument>
<argument name="authSession" xsi:type="object">
Magento\Backend\Model\Auth\Session\Proxy</argument>
<argument name="formKey" xsi:type="object">
Magento\Framework\Data\Form\FormKey\Proxy</argument>
<argument name="scopeType" xsi:type="const">
Magento\Store\Model\ScopeInterface::SCOPE_STORE </argument>
<argument name="backendHelper" xsi:type="object">
Magento\Backend\Helper\Data\Proxy</argument>
</arguments>
</type>
그러나 동시에 구체적인 클래스에서 주입에 필요한 di.xml에 정의 된 클래스는 생성자에서 다시 선언됩니다.
<?php
public function __construct(
\Magento\Framework\App\Route\ConfigInterface $routeConfig,
\Magento\Framework\App\RequestInterface $request,
\Magento\Framework\Url\SecurityInfoInterface $urlSecurityInfo,
\Magento\Framework\Url\ScopeResolverInterface $scopeResolver,
\Magento\Framework\Session\Generic $session,
\Magento\Framework\Session\SidResolverInterface $sidResolver,
\Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolverFactory,
\Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
$scopeType,
\Magento\Backend\Helper\Data $backendHelper,
\Magento\Backend\Model\Menu\Config $menuConfig,
\Magento\Framework\App\CacheInterface $cache,
\Magento\Backend\Model\Auth\Session $authSession,
\Magento\Framework\Encryption\EncryptorInterface $encryptor,
\Magento\Store\Model\StoreFactory $storeFactory,
\Magento\Framework\Data\Form\FormKey $formKey,
array $data = []
) {
//...
}
?>
\Magento\Framework\App\Route\ConfigInterface $routeConfig
예를 들어, 위의 생성자를 보면에 정의되어 있지 않습니다 di.xml
. 그것은 생성자에서만 정의되며 Magento는 여전히 routeConfig
클래스를 사용하기 위해 주입 합니다. 동일 \Magento\Framework\Encryption\EncryptorInterface $encryptor
하고 몇 가지 다른.
그렇다면 di.xml
Magento가 클래스에 이러한 의존성을 주입하기에 생성자에 선언이 충분할 때 생성자와 생성자 에 다른 주입을 정의해야하는 이유는 무엇입니까?