আমি বুঝতে পারি না কেন, কিছু ক্লাসে, তাদের নির্ভরতা ইঞ্জেকশনগুলি দুবার ঘোষণা করা হয় - একবার এবং 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
কনস্ট্রাক্টরগুলিতে এই ঘোষণাগুলি থাকার পরে ম্যাজেন্টো ব্যবহারের জন্য ক্লাসের মধ্যে নির্ভরশীলতাগুলি ইনজেকশনের জন্য পর্যাপ্ত হয় যখন উভয় এবং কনস্ট্রাক্টরে অন্যান্য ইঞ্জেকশনগুলি সংজ্ঞায়িত করার প্রয়োজন হয় ?