में निर्भरता इंजेक्शन मैं वर्तमान में एक शिक्षार्थी रिएक्ट/रेडक्स एप्लिकेशन का निर्माण कर रहा हूं और मैं सेवाओं के लिए निर्भरता इंजेक्शन कैसे करें, इसके बारे में अपने सिर को लपेट नहीं सकता।रेडक्स एक्शन निर्माता
अधिक विशिष्ट होने के लिए: मेरे पास BluetoothService
(जो तृतीय पक्ष लाइब्रेरी को सारणीबद्ध करता है) ब्लूटूथ के माध्यम से अन्य उपकरणों को स्कैन और कनेक्ट करने के लिए है। यह सेवा कार्रवाई रचनाकारों द्वारा उपयोग किया जाता है, कुछ इस तरह:
const bluetoothService = require('./blueToothService')
function addDevice(device) {
return { type: 'ADD_DEVICE', device }
}
function startDeviceScan() {
return function (dispatch) {
// The Service invokes the given callback for each found device
bluetoothService.startDeviceSearch((device) => {
dispatch(addDevice(device));
});
}
}
module.exports = { addDevice, startDeviceScan };
(मैं thunk-मिडलवेयर उपयोग कर रहा हूँ)
मेरे समस्या फिर भी है:
deviceActionCreators.js: सेवा-निर्माता में सेवा को इंजेक्ट कैसे करें?
मैं नहीं चाहता कि हार्ड-कोडित require
(या import
ईएस 6 में) क्योंकि मुझे नहीं लगता कि यह एक अच्छा पैटर्न है - परीक्षण को इतना कठिन बनाने के अलावा। मैं अपने वर्क स्टेशन (जिसमें ब्लूटूथ नहीं है) पर ऐप का परीक्षण करते समय एक नकली सेवा का उपयोग करने में सक्षम होना चाहता हूं - इसलिए पर्यावरण के आधार पर मैं अपने एक्शन-निर्माता के अंदर इंजेक्शन वाले एक ही इंटरफ़ेस के साथ एक और सेवा चाहता हूं। एक स्थिर आयात का उपयोग करने के साथ यह संभव नहीं है।
मैंने पहले से ही विधि के लिए ब्लूटूथ सेवा को पैरामीटर बनाने की कोशिश की है (startDeviceScan(bluetoothService){}
) - प्रभावी ढंग से विधि को शुद्ध बनाते हैं - लेकिन यह समस्या को कार्रवाई का उपयोग करके कंटेनर में ले जाता है। प्रत्येक कंटेनर को तब सेवा के बारे में जानना होगा और इसके कार्यान्वयन को कार्यान्वित करना होगा (उदाहरण के लिए प्रोप के माध्यम से)। प्लस जब मैं किसी अन्य क्रिया के भीतर से कार्रवाई का उपयोग करना चाहता हूं तो मैं एक ही समस्या के साथ फिर से समाप्त होता हूं।
लक्ष्य: मैं बूटस्ट्रैपिंग समय पर निर्णय लेना चाहता हूं जो मेरे ऐप में उपयोग करने के लिए लागू है। क्या ऐसा करने के लिए कोई अच्छा तरीका या सर्वोत्तम अभ्यास है?
उस विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद। मैंने पहले मिडलवेयर के बारे में पढ़ा लेकिन अभी तक इसे पूरी तरह से समझ नहीं पाया। क्या आप कहेंगे कि प्रतिक्रिया-रेडक्स ऐप में सेवाओं का उपयोग करने के लिए यह मानक या सर्वोत्तम अभ्यास है? – Charminbear
आपका स्वागत है - मैं इसके साथ भी संघर्ष कर रहा हूं :) –
धन्यवाद! इसका उपयोग करके मैं रेडक्स और रेडक्स-थंक के साथ निर्बाध रूप से काम कर कोणीय निर्भरता इंजेक्शन प्राप्त करने में सक्षम था, जो कोणीय से हमारे संक्रमण को अधिक चिकनी प्रतिक्रिया देने में सक्षम बनाता है: https://gist.github.com/jasononeil/e835aeb2ce7b9f099616ef2098caac1d –