2012-02-16 20 views
10

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

मेरे डीआईसी में मैं (उदाहरण के लिए) एक कॉन्फ़िगर ऑब्जेक्ट और अनुरोध ऑब्जेक्ट रखता हूं। मैं समझता हूं कि इन ऑब्जेक्ट्स अनुरोध स्कोप में (प्रत्येक बार जब आप इसे इस कंटेनर से अनुरोध करते हैं तो वही उदाहरण उपयोग किया जाता है) वही रहता है। लेकिन यह तब होता है जब मैं डीआईसी के एक ही उदाहरण का पुन: उपयोग करता हूं।

मुझे अपनी कक्षाओं के आसपास डीआईसी कैसे पास करनी चाहिए? कहें कि मैं इसे अपने राउटर क्लास में उपयोग करना चाहता हूं, क्या मुझे इसे अपने राउटर क्लास के निर्माता में पास करने की ज़रूरत है? लेकिन राउटर क्लास किसी अन्य वर्ग में बनाई गई है, और उसमें पहले से ही यह डीआईसी ऑब्जेक्ट होना चाहिए।

या मुझे इस डीआईसी का सिंगलटन बनाना चाहिए?

उत्तर

7

सिंगलटन मार्ग पर न जाएं। यह प्रभावी रूप से डीआईसी आपको देता है कि सभी फायदे लेता है। आम तौर पर आप कन्स्ट्रक्टर में कंटेनर पास करते हैं, या लागू होने पर एक विधि पैरामीटर के रूप में।

हाँ, यह आपके आवेदन के आसपास कंटेनर वस्तु पारित करने में एक अतिरिक्त प्रयास करने की आवश्यकता है, लेकिन एक परिणाम के रूप में अपने कोड को दर्शाता है अच्छी तरह से है कि इन कक्षाओं निर्भर इस वस्तु काम करने के लिए कर रहे हैं।

+1

सबसे अच्छा तरीका है मेरे आवेदन के बूटस्ट्रैप में डीआईसी बनाने और जहां आवश्यक हो वहां इसे पास करें? एक अच्छा दृष्टिकोण की तरह लगता है, लेकिन वास्तव में मुझे उसमें कुछ अतिरिक्त प्रयास करने की जरूरत है। (मेरी कक्षाएं भी बहुत टेस्टेबल होंगी) – jayv

+0

एक कंटेनर के लिए जो पूरे एप्लिकेशन के माध्यम से उपयोग किया जाता है जो एक बहुत अच्छा विचार हो सकता है। यह संसाधनों/वस्तुओं को प्रभावी रूप से समाहित करता है, जिन्हें अन्यथा वैश्विक चर या सिंगलेट्स के रूप में उजागर करने की आवश्यकता होती है। याद रखें कि उपयोग के सीमित दायरे के साथ आप 'स्थानीय' डी कंटेनर भी प्राप्त कर सकते हैं। उनको उस क्षेत्र में अंतर्निहित बनाया जाना चाहिए जिसमें वे आवश्यक हैं। – Mchl

+0

क्या आप मुझे सीमित दायरे के उपयोग का एक संक्षिप्त व्यावहारिक उदाहरण दे सकते हैं? – jayv

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