मान लें कि मैं एक Magento 2 एक्सटेंशन का निर्माण कर रहा हूं जो .... अच्छा ... महत्वपूर्ण नहीं है। मान लीजिए कि यह सुपर कमाल का सामान करता है।
लेकिन मैं यह सुनिश्चित करना चाहता हूं कि यह उचित मानकों का उपयोग करके बनाया गया है ताकि अन्य डेवलपर्स इसे बढ़ा सकें।
मुझे इंटरफेस के साथ संयोजन में DI का उपयोग कब करना चाहिए और कब नहीं करना चाहिए?
यह स्पष्ट करने के लिए यहां एक मुख्य उदाहरण है।
क्लास Magento\Core\Helper\Data
में एक कंस्ट्रक्टर होता है:
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\App\State $appState,
PriceCurrencyInterface $priceCurrency,
$dbCompatibleMode = true
) {
parent::__construct($context);
$this->_scopeConfig = $scopeConfig;
$this->_storeManager = $storeManager;
$this->_appState = $appState;
$this->_dbCompatibleMode = $dbCompatibleMode;
$this->_priceCurrency = $priceCurrency;
}
मेरा प्रश्न संस्करण पर केंद्रित है \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
(मुझे पता है कि एक ही निर्माता में अन्य हैं, लेकिन एक स्पष्टीकरण उन सभी मामलों में फिट होगा जो मुझे लगता है)।
di.xml
कोर मॉड्यूल से के अनुसार var इसका उदाहरण होगा Magento\Framework\App\Config
:
<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />
लेकिन मैं आसानी से बदल सकते हैं कि अगर मुझे जरूरत है।
मुझे अपने कोड में उस तरह के इंटरफेस का उपयोग कब करना चाहिए?
मैंने यह अधूरा नमूना मॉड्यूल (विज्ञापन के लिए खेद है) बनाया है, जहां मैंने ऐसे इंटरफेस का उपयोग किया है, लेकिन वे सभी कोर से आते हैं। मैंने अपना खुद का एक नहीं बनाया है। क्या मैं?