मुझे लगता है कि आपका आधार यहां थोड़ा उलझन में है, आप एक कारखाने को इंजेक्ट करने की बात करते हैं, लेकिन फैक्टरी पैटर्न एक रचनात्मक पैटर्न है जिसका उद्देश्य एक सबसेट करना था जो एक निर्भरता इंजेक्शन फ्रेमवर्क करता है, जब डीआई फ्रेमवर्क इस पैटर्न का प्रचलन नहीं था। उस कारण से उपयोगी है। हालाँकि, यदि आपके पास DI ढांचा है, तो आपको वास्तव में कारखाने की आवश्यकता नहीं होगी क्योंकि DI फ्रेमवर्क उस उद्देश्य को पूरा कर सकता है जो कारखाना पूरा करेगा।
उस ने कहा, मुझे निर्भरता इंजेक्शन के बारे में थोड़ा समझाएं और आप आमतौर पर इसका उपयोग कैसे करेंगे।
डिपेंडेंसी इंजेक्शन करने के कई तरीके हैं, लेकिन सबसे आम हैं कंस्ट्रक्टर इंजेक्शन, प्रॉपर्टी इंजेक्शन और डायरेक्ट डिकोनेटर। मैं कंस्ट्रक्टर इंजेक्शन के बारे में बोलूंगा क्योंकि प्रॉपर्टी इंजेक्शन ज्यादातर समय का गलत तरीका है (कुछ समय का सही तरीका), और जब आप पूरी तरह से अन्य तरीकों से नहीं कर सकते, तो सिवाय DIContainer एक्सेस के बेहतर नहीं होगा।
कंस्ट्रक्टर इंजेक्शन वह जगह है जहाँ आपके पास एक निर्भरता के लिए इंटरफ़ेस है और एक DIContainer (या फ़ैक्टरी) है जो उस निर्भरता के लिए ठोस कार्यान्वयन को जानता है, और जिस किसी चीज़ के लिए आपको उस ऑब्जेक्ट पर ज़रूरत होती है जो उस इंटरफ़ेस पर निर्भर करता है, निर्माण के समय आप कारखाने से कार्यान्वयन को सौंपते हैं यह।
अर्थात
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
कई DI चौखटे इसे काफी हद तक सरल कर सकते हैं, जहां आपका DIContainer उन इंटरफेस के लिए UserRepository के निर्माता का निरीक्षण करेगा, जहां वह इसके लिए ठोस कार्यान्वयन जानता है, और स्वचालित रूप से आपके लिए इसे सौंप देगा; इस तकनीक को अक्सर नियंत्रण का व्युत्क्रम कहा जाता है, हालांकि DI और IoC दोनों ऐसे शब्द हैं जो बहुत अधिक आपस में जुड़ जाते हैं और इनमें अस्पष्ट (यदि कोई हो) अंतर होता है।
अब अगर आप सोच रहे हैं कि ओवररचिंग कोड DIContainer को कैसे एक्सेस करता है, तो आप इसे एक्सेस करने के लिए या तो एक स्टैटिक क्लास ले सकते हैं या इससे अधिक उपयुक्त क्या है कि ज्यादातर DI फ्रेमवर्क आपको एक DIContainer को नया बनाने की अनुमति देते हैं, जिसमें यह वास्तव में बस के रूप में व्यवहार करेगा प्रकार के लिए एक आंतरिक सिंगलटन शब्दकोश के लिए एक आवरण जो इसे दिए गए इंटरफेस के लिए ठोस होना जानता है।
इसका मतलब है, आप DIContainer को कहीं भी कोड में नया कर सकते हैं और प्रभावी रूप से उसी DIContainer को प्राप्त कर सकते हैं जिसे आपने पहले ही अपने इंटरफ़ेस-टू-कंक्रीट संबंधों को जानने के लिए कॉन्फ़िगर किया था। DIContainer को कोड के उन हिस्सों से छुपाने का सामान्य मतलब जो इसके साथ सीधे संवाद नहीं करना चाहिए, केवल यह सुनिश्चित करना है कि केवल आवश्यक प्रोजेक्ट (s) के पास DI फ्रेमवर्क का संदर्भ है।