मैं थोड़ी देर के लिए एमईएफ का उपयोग कर रहा हूं और आईओसी उत्पादों के बजाए इसका उपयोग करने के लिए महत्वपूर्ण कारक यह है कि हमारे पास नियमित रूप से हमारे प्लगइन निर्देशिका में दिए गए इंटरफ़ेस के 3-5 कार्यान्वयन होते हैं। उन कार्यान्वयनों में से कौन सा उपयोग किया जाना चाहिए वास्तव में ऐसा कुछ है जिसे केवल रनटाइम पर ही तय किया जा सकता है।
MEF दे ठीक यही करने में अच्छा है। आमतौर पर, आईओसी सुनिश्चित करें कि आप भविष्य में कुछ बिंदु पर ORM उत्पाद 2 के लिए ORM उत्पाद 1 के आधार पर एक IUserRepository, बाहर स्वैप सकता है एक cononical उदाहरण के लिए, बनाने की ओर है। हालांकि, अधिकांश आईओसी समाधान मानते हैं कि किसी दिए गए समय पर केवल एक IUserRepository ही प्रभावी होगा।
यदि, आपको किसी दिए गए पृष्ठ अनुरोध के लिए इनपुट डेटा के आधार पर एक को चुनने की आवश्यकता है, तो आईओसी कंटेनर आम तौर पर हानि पर होते हैं।
उदाहरण के तौर पर, हम थोड़ी देर के लिए काम कर रहे एक बड़े वेब ऐप के लिए एमईएफ प्लगइन्स के माध्यम से हमारी अनुमति जांच और हमारी सत्यापन करते हैं। एमईएफ का उपयोग करते हुए, हम देख सकते हैं कि जब रिकॉर्ड की बनाई गई तारीख पर और सत्यापन प्लगइन के लिए खुदाई की जा रही है जो वास्तव में प्रभाव में था जब रिकॉर्ड बनाया गया था और उस प्लगइन के माध्यम से रिकॉर्ड चलाया गया था और वर्तमान में वैध है और रिकॉर्डर की वैधता की तुलना में वैधता पहर।
इस प्रकार की शक्ति हमें प्लगइन के लिए गिरावट ओवरराइड को परिभाषित करने देती है। जिन ऐप्स पर मैं काम कर रहा हूं वे वास्तव में 30+ कार्यान्वयन के लिए तैनात एक ही कोडबेस हैं। इसलिए, हम आमतौर पर प्लगइन की तलाश कर रहे हैं:
- एक इंटरफ़ेस कार्यान्वयन जो वर्तमान साइट के लिए विशिष्ट है और विशिष्ट रिकॉर्ड प्रकार में प्रश्न है।
- एक इंटरफ़ेस कार्यान्वयन जो वर्तमान साइट के लिए विशिष्ट है, लेकिन किसी भी प्रकार के रिकॉर्ड के साथ काम करता है।
- एक इंटरफ़ेस जो किसी भी साइट और किसी भी रिकॉर्ड के लिए काम करता है।
इससे हमें डिफ़ॉल्ट प्लगइन का एक सेट बंडल करने देता है जो कि लात मारता है, लेकिन केवल तभी जब यह विशिष्ट कार्यान्वयन ग्राहक विशिष्ट नियमों के साथ ओवरराइड नहीं करता है।
आईओसी एक महान तकनीक है, लेकिन वास्तव में कंक्रीट कार्यान्वयन के बजाय इंटरफेस को कोड करना आसान बनाने के बारे में और अधिक लगता है। हालांकि, उन कार्यान्वयनों को स्वैप करना आईओसी में एक परियोजना शिफ्ट प्रकार की घटना है। एमईएफ में, आप इंटरफेस और कंक्रीट कार्यान्वयन की लचीलापन लेते हैं और इसे कई उपलब्ध विकल्पों के बीच रनटाइम निर्णय लेते हैं।
स्रोत
2011-09-10 20:14:29
संबंधित प्रश्न [यहां] (http://stackoverflow.com/questions/411660/enterprise-library-unity-vs-other-ioc-containers) – Benjol