2015-11-08 3 views
7

Dagger2 के दस्तावेज़ में, यह कहनाक्या है "अनुरोध किए जाने पर डैगर उन क्षेत्रों को इंजेक्ट करेगा, लेकिन नए उदाहरण नहीं बनाएंगे" का अर्थ है?

अपने वर्ग है @ इंजेक्षन-एनोटेट क्षेत्रों लेकिन कोई @ निर्माता, यदि अनुरोध डैगर उन क्षेत्रों इंजेक्षन जाएगा इंजेक्षन-उसकी व्याख्या, लेकिन नई उदाहरणों नहीं पैदा करेगा। @ इंजेक्शन एनोटेशन के साथ एक नो-तर्क कन्स्ट्रक्टर जोड़ें, यह इंगित करने के लिए कि डैगर अच्छी तरह से उदाहरण बना सकता है।

यह फ़ील्ड कैसे इंजेक्ट करता है लेकिन नए उदाहरण नहीं बनाते? क्या फर्क पड़ता है?

उत्तर

7

"अगर अनुरोध किया गया" का अर्थ है "मैन्युअल रूप से इंजेक्शन", यानी वस्तु आपके द्वारा बनाई गई है या कुछ ढांचे (एंड्रॉइड और क्रियाकलाप वस्तुएं सोचें) और फिर आप 'DaggerMyComponent.inject (myObject);' को कॉल करते हैं।

दूसरी तरफ, जब आप @ इंजेक्ट एनोटेटेड कन्स्ट्रक्टर डैगर प्रदान करते हैं तो आप इस कक्षा की वस्तुओं को तुरंत चालू कर पाएंगे, इसलिए आपकी कक्षा निर्भरता ग्राफ के बीच में हो सकती है और ऑब्जेक्ट स्वचालित रूप से डैगर द्वारा आपके लिए बनाया जाएगा ।

एंड्रॉयड में आम तौर पर आप मैन्युअल रूप से केवल ऑब्जेक्ट का निर्माण होगा कि/(यानी आप उनके जीवन चक्र को नियंत्रित नहीं करते) आवेदन, क्रियाएँ, सेवा, आदि जैसे एंड्रॉयड द्वारा आप के लिए नष्ट कर दिया इंजेक्षन

इसके अलावा, आप की जरूरत नहीं है चिंता करने के लिए यदि आप गलती से कुछ वर्ग के निर्माता पर @Inject एनोटेशन याद करते हैं। यदि आपकी कक्षा ग्राफ के बीच है तो डैगर यह पकड़ लेगा कि ऐसी निर्भरताएं हैं जो संतुष्ट नहीं हैं और उचित त्रुटि के साथ संकलन में विफल हो जाएंगी।

+0

धन्यवाद !! .. एक और सवाल .. क्या आप इसे देख सकते हैं। मैं एक वर्ग में डैगर का उपयोग करता हूं जो निर्भरता ग्राफ के बीच में, इस वर्ग को कुछ निर्भरताओं की आवश्यकता होती है जो पहले ही मॉड्यूल द्वारा प्रदान की जाती हैं। सबसे पहले मैं फील्ड इंजेक्शन का उपयोग करता हूं, बस फ़ील्ड पर 'इंजेक्ट' एनोटेटेड, और कोई कन्स्ट्रक्टर नहीं, फिर यह असफल रहा, मुझे एक शून्य सूचक दिया। उसके बाद मैं कन्स्ट्रक्टर में क्षेत्र को स्थानांतरित करता हूं, कन्स्ट्रक्टर पर 'इंजेक्ट' एनोटेटेड, यह अच्छी तरह से काम करता है। क्या मैं कुछ भुल गया? –

+1

मुझे डर है कि प्रश्न बहुत स्पष्ट नहीं है ... क्या आप इसे प्रदान किए गए प्रासंगिक कोड के साथ अलग प्रश्न के रूप में पोस्ट कर सकते हैं (और यहां लिंक के साथ एक टिप्पणी डालें)? – Ognyan

+0

अपना उत्तर और कुछ ब्लॉग पढ़ने के बाद, मुझे पता चला कि मेरे कोड में क्या गलत है। मैंने निर्भरता वर्ग में एक खाली कन्स्ट्रक्टर नहीं जोड़ा है, इससे पहले मैंने सोचा था कि प्रत्येक निर्भरता को मॉड्यूल में परिभाषित करने की आवश्यकता है ... डगर के साथ थोड़ा परिचित होना चाहिए .. धन्यवाद! –

संबंधित मुद्दे