আমি বুঝতে পারি না কেন, কিছু ক্লাসে, তাদের নির্ভরতা ইঞ্জেকশনগুলি দুবার ঘোষণা করা হয় - একবার এবং di.xmlকংক্রিটের শ্রেণীর কনস্ট্রাক্টরে।
উদাহরণস্বরূপ Magento\Backend\Model\Url, এর di.xmlডিআই সংজ্ঞায়িত করার জন্য টাইপের এই সেট রয়েছে:
<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>
কিন্তু একই সময়ে, তার কংক্রিট শ্রেণিতে, ইঞ্জেকশনের জন্য ডায়.এক্সএমএল প্রয়োজনীয় সংজ্ঞাগুলি পুনরায় নির্ধারকটিতে পুনরায় ঘোষণা করা হয়:
<?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। এটি কেবল কনস্ট্রাক্টরে সংজ্ঞায়িত করা হয়েছে এবং ম্যাজেন্টো এখনও routeConfigক্লাসে ব্যবহারের জন্য ইনজেক্ট করবে , তাই না? একই জন্য \Magento\Framework\Encryption\EncryptorInterface $encryptorএবং কয়েক অন্যান্য।
তারপরে, কেন di.xmlকনস্ট্রাক্টরগুলিতে এই ঘোষণাগুলি থাকার পরে ম্যাজেন্টো ব্যবহারের জন্য ক্লাসের মধ্যে নির্ভরশীলতাগুলি ইনজেকশনের জন্য পর্যাপ্ত হয় যখন উভয় এবং কনস্ট্রাক্টরে অন্যান্য ইঞ্জেকশনগুলি সংজ্ঞায়িত করার প্রয়োজন হয় ?