2011-01-13 8 views
6

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

उत्तर

6

ठीक है, आप हमेशा अपने उपभोक्ता में एक Abstract Factory इंजेक्षन और उसका उपयोग स्थानीय स्तर पर scoped वस्तुओं को बनाने के कर सकते हैं।

यह कभी-कभी आवश्यक होता है। इन उदाहरणों को देखें:

हालांकि, आमतौर पर हम संस्थाओं के लिए डि का उपयोग नहीं करते हैं, लेकिन ज्यादातर सेवाओं के लिए। इसके बजाए, संस्थाएं आमतौर पर कुछ प्रकार के रिपोजिटरी के माध्यम से बनाई जाती हैं।

+0

, संस्थाओं डि बुनियादी ढांचे का हिस्सा ही नहीं हो सकता है? क्या मैं इसे जटिल बना रहा हूं? – mytwocents

+1

यह सही है: संस्थाएं और मूल्य वस्तुएं अलग-अलग जीवन जीती हैं। एक अर्थ में वे अभी भी डीआई इंफ्रास्ट्रक्चर (आदर्श रूप से, सब कुछ है) द्वारा प्रबंधित किया जाता है, लेकिन बहुत अप्रत्यक्ष तरीके से। वे आमतौर पर रेपॉजिटरीज़ या इसी तरह के माध्यम से स्थायी भंडारण को पढ़ते और लिखे जाते हैं, और * वे * सेवाएं हैं जो डीआई बुनियादी ढांचे का हिस्सा हैं। –

+0

ठीक है, मैंने सोचा था कि डि प्रिंसिपल कह रहे थे कि व्यक्ति Enitity वस्तु (विन्यास के माध्यम से) आईओसी कंटेनर से उपलब्ध कराया जाना चाहिए ... – mytwocents

4

जब आप एक सेवा ऑब्जेक्ट (उदा WriteFileService) का निर्माण, आप इसे चीजों में इंजेक्षन वह आंतरिक रूप से की जरूरत है यह काम है पूरा करने के लिए। शायद इसे फाइल सिस्टम ऑब्जेक्ट या कुछ चाहिए।

अपने उदाहरण में Person वस्तु एक विधि कॉल करने के लिए एक पैरामीटर के रूप सेवा वस्तु को पारित किया जाना चाहिए। जैसे writeFileService.write(person)

तो सामान्य रूप में
+0

तो आप Entity person ऑब्जेक्ट में WriteFileService इंजेक्ट नहीं करेंगे ... इसलिए इस मामले में, मैं देख सकता हूं कि DI इंफ्रास्ट्रक्चर के बिना इकाई का उपयोग कैसे किया जा सकता है। हालांकि, WriteFileService ने इसे बनाया जाने पर डीआई इंफ्रास्ट्रक्चर का उपयोग किया था (एक इंजेक्शन क्लास की आवश्यकता के आधार पर जो एक विशिष्ट आउटपुट को लिखता है उदा।WriterA - डेटाबेस, WriterB को लिखता है - एक कंसोल के अधिकार आदि ...)। – mytwocents

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