7

के साथ एक नुजेट पैकेज डिज़ाइन करना हम वर्तमान में एक नौज पैकेज लिख रहे हैं जो सेवा गेटवे के रूप में कार्य करता है। इसकी ज़िम्मेदारी कॉल को बाहरी सेवा में लपेटना है, ताकि सही तरीके से बनाया जा सके और प्रतिक्रिया सही ढंग से निपटाई जा सके। इसका उद्देश्य देवता के समय को ओवरहेड को कम करना है जब कोई नया ग्राहक बाहरी सेवा का उपभोग करना चाहता है।निर्भरता इंजेक्शन

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

हम आमतौर पर स्ट्रोककटैप का उपयोग हमारे आईओसी कंटेनर के रूप में करते हैं, लेकिन मुझे आश्चर्य है कि हम अपने क्लाइंट प्रोजेक्ट को निर्भरता इंजेक्शन 'अंतर्निर्मित' के साथ कैसे कॉन्फ़िगर करते हैं? ऐसा लगता है कि प्रत्येक उपभोक्ता को पैकेज के लिए निर्भरता संकल्प को तार करना होगा। हालांकि, यह भी ऐसा नहीं होना चाहिए कि प्रत्येक क्लाइंट को स्ट्रक्चर मैप का उपयोग करना चाहिए और 'क्लाइंट रजिस्ट्री' (प्रारंभकर्ता) वर्ग को अपने स्टार्ट-अप तर्क में जोड़ना होगा।

क्या इस समस्या को हल करने में मदद करने के लिए कोई मार्गदर्शक सिद्धांत हैं? या IoC सिद्धांत पर बनाए गए जटिल nuget संकुल के किसी भी अच्छे उदाहरण?

उत्तर

2

आप CommonServiceLocator का उपयोग कर सकते हैं - यह एक पूर्ण आईओसी कंटेनर के रूप में समृद्ध नहीं है लेकिन यह आपके पैकेज कंटेनर अज्ञेयवादी बना देगा, और आपके पैकेज के उपभोक्ताओं को अपनी पसंद के आईओसी कंटेनर का उपयोग जारी रखने की अनुमति देनी चाहिए।

लाइब्रेरी आईओसी कंटेनर और सेवा लोकेटर पर एक अमूर्तता प्रदान करती है। लाइब्रेरी का उपयोग करने से किसी एप्लिकेशन को हार्ड संदर्भों पर भरोसा किए बिना क्षमताओं तक अप्रत्यक्ष रूप से पहुंचने की अनुमति मिलती है। उम्मीद है कि इस लाइब्रेरी का उपयोग करके, थर्ड-पार्टी एप्लिकेशन और फ्रेमवर्क आईओसी/सर्विस लोकेशन को एक विशिष्ट कार्यान्वयन के बिना खुद को टाई बिना शुरू कर सकते हैं।

+1

ध्यान दें कि सीएसएल केवल हल सुविधा प्रदान करता है, लेकिन आप एक दूसरे 'MyNyGetPackage.Integration.StructureMap' कि StructureMap के साथ एकीकृत करता जोड़ सकते हैं। – Steven

+0

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

+1

@ निक आह मुझे लगता है कि मैं देख रहा हूं कि आप कहां से आ रहे हैं। उस स्थिति में मैंने कुछ परियोजनाएं देखी हैं जो आंतरिक रूप से ऑटोफैक का उपयोग करती हैं (यानि आंतरिक रूप से सेट और ऑटोफैक असेंबली में उलझा हुआ है) जो तब बाहरी दुनिया में फैक्ट्री ऑब्जेक्ट का पर्दाफाश करती है। कारखाना तब पैकेज और इसकी सामग्री में मुख्य प्रविष्टि बिंदु बन जाता है। – MattDavey

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