2013-07-03 16 views
18

डैगर का उपयोग करते समय, मैंने पाया कि मुझे सिंगलटन के कई उदाहरण मिल रहे हैं जब भी मुझे इसकी आवश्यकता होती है। मैंने कक्षा को एनोटेट किया है और @Singleton के साथ विधि प्रदान करता है। क्या कोई सोच सकता है कि यह क्यों हो रहा है?डैगर में सिंगलेट्स 1.x

संपादित करें:

यदि यह मदद करता है, मैं डैगर के GitHub में नमूना आवेदन (https://github.com/square/dagger/tree/master/examples/android-activity-graphs) के रूप में अपने अनुप्रयोग के लिए एक ही संरचना का पालन किया है। मैं कस्टम गतिविधि में सिंगलटन और कस्टम Application कक्षा में @Provides का उपयोग करके प्रदान की गई कुछ तृतीय पक्ष कक्षाएं प्राप्त करने का प्रयास कर रहा हूं। क्या ऐसा इसलिए है क्योंकि मैं प्रत्येक ऑब्जेक्ट पर मूल ऑब्जेक्ट ग्राफ़ में मॉड्यूल प्लस कर रहा हूं?

(पुनश्च: मैं डैगर और डि सामान्य रूप में करने के लिए नए कर रहा हूँ, इसलिए यदि आप इतना है कि मैं सीख सकें एक विवरण प्रदान कर सकता है मैं आभारी होंगे धन्यवाद।।) डैगर 1.x में,

उत्तर

39

@Singleton , आप सोच सकते हैं उससे अलग कार्य करता है। @Singleton में जेएसआर-330 स्पेक परिभाषा "जावा प्रति एक" है और इसी तरह डैगर इसका व्याख्या करता है।

तो यदि आपके पास @Singleton के रूप में चिह्नित कुछ है, और यह आपके एप्लिकेशन ग्राफ़ (छोटे-जीवनकाल ग्राफ के विपरीत) में भौतिक है, तो आपको प्रति एप्लिकेशन एक उदाहरण मिलता है।

आप किसी आइटम एनोटेट @Singleton मॉड्यूल आप अपनी गतिविधि ग्राफ कॉन्फ़िगर करने के लिए उपयोग में नहीं है कि है (अर्थात, कि एक ग्राफ के साथ साथ() आपरेशन में इस्तेमाल एक मॉड्यूल द्वारा निर्दिष्ट के हिस्से से प्राप्त होता है) तो आप मिल जाएगा एक-प्रति-गतिविधि ग्राफ।

यदि आपको एक बार प्रति एप्लिकेशन होने की आवश्यकता है, तो आपको यह सुनिश्चित करना होगा कि यह एप्लिकेशन ग्राफ़ के हिस्से के रूप में बनाया जाए। आप इसे दो तरीकों से कर सकते हैं। या तो स्पष्ट रूप से इसे अपने एप्लिकेशन मॉड्यूल से @Provides विधि प्रदान करें, या आप इसे एप्लिकेशन मॉड्यूल में @ मॉड्यूल (इंजेक्ट्स = ...) में से किसी एक वर्ग के रूप में सूचीबद्ध कर सकते हैं।

(आप @Singleton के साथ चिह्नित नहीं करते हैं की तुलना में आप इंजेक्शन साइट प्रति एक मिल जाएगा।)

तो याद है, (प्लस द्वारा बनाई ग्राफ) एक अलग ग्राफ कि ग्राफ के लिए अंक के रूप में देखा जाता है जहाँ से यह पैदा हुआ था, और इसे लपेटता है, इसके भीतर के उदाहरणों का उपयोग कर सकते हैं, लेकिन एक ही ग्राफ नहीं है।

नोट - डैगर 2.x इस को बेहतर बनाता है, और व्यापक/संकरा जीवन काल के रेखांकन के बीच एक माता पिता/बच्चे के रिश्ते के साथ,, कस्टम scoping एनोटेशन का समर्थन करता है, हालांकि तंत्र समान है एक ग्राफ (घटक) गुंजाइश एनोटेशन प्रति के साथ

+0

इसे साफ़ करने के लिए धन्यवाद। जब आप कल्पना कहते हैं, क्या आप JSR330 का जिक्र कर रहे हैं? – Raghuveer

+0

हां। क्षमा करें - मैं जवाब संपादित कर दूंगा। –

+0

@ क्रिस्टियन ग्रिबर यह कैसे सिंगलटन इंजेक्शन पर लागू होता है जो कि मूल ग्राफ के विभिन्न उप-ग्राफों में उपयोग किए जाते हैं? क्या इसका मतलब है कि एक-प्रति-ग्राफ वर्ग का उपयोग किया जाता है, सिवाय इसके कि जब यह किसी मूल ग्राफ में पहले से मौजूद है? – vinc3m1

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