2011-06-17 8 views
6

MEF isnot anIoCcontainer। लेकिन ऐसा लगता है कि यह लगभग एक आईओसी कंटेनर है। ऐसा लगता है कि मैं आसानी से एमओएफ को आईओसी कंटेनर की तरह व्यवहार कर सकता हूं (नीचे उदाहरण देखें) और एमईएफ को एक पूर्ण उड़ा आईओसी कंटेनर बनाने में बहुत याद नहीं है।आईओसी कंटेनरों के बराबर होने के लिए एमईएफ में क्या गुम है?

एमईएफ में मौजूद वास्तविक विशेषताएं क्या हैं जो स्ट्रुक्योरैप, एकता इत्यादि को समानता प्राप्त करनी है?

क्या आपको लगता है कि, this feaure request समझ में आता है?

using System; 
using System.Collections.Generic; 
using System.ComponentModel.Composition; 
using System.ComponentModel.Composition.Hosting; 
using System.ComponentModel.Composition.Primitives; 
using System.Linq; 
... 
private CompositionContainer container; 
public void Configure() 
{ 
    container = CompositionHost.Initialize( 
     new AggregateCatalog(
      AssemblySource.Instance.Select(
       x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));  
     var batch = new CompositionBatch();   
     batch.AddExportedValue<IWindowManager>(new WindowManager()); 
     batch.AddExportedValue<IEventAggregator>(new EventAggregator()); 
     batch.AddExportedValue(container);   
     container.Compose(batch); 
} 

उत्तर

3

जैसा कि चर्चा की गई, एमईएफ को आईओसी कंटेनर बनाने के लिए नहीं बनाया गया था। हालांकि, इसमें बहुत सारी समानताएं हैं। यदि कार्यक्षमता एमईएफ प्रदान करता है तो आपके आईओसी कंटेनर की ज़रूरतों के लिए पर्याप्त है, तो आप आगे बढ़ सकते हैं और इसे आईओसी कंटेनर के रूप में उपयोग कर सकते हैं।

जबकि एमईएफ शायद हर किसी के आईओसी कंटेनर जरूरतों के अनुरूप नहीं होगा, अगले संस्करण में हम बदलाव कर रहे हैं जो मुझे लगता है कि अधिक लोगों के लिए आईओसी कंटेनर के रूप में उपयोग करने लायक होगा। उनमें से कुछ हैं:

  • वैकल्पिक रूप से एक प्रणाली में त्रुटियों जहां कुछ भी खारिज कर दिया
  • कन्वेंशन मॉडल समर्थन निर्यात किया और बदले में आयात करने के लिए आप प्रकार रजिस्टर देता है कि नहीं करना चाहती की आसान निदान के लिए अस्वीकृति अक्षम करने अपने आप प्रकारों पर निर्यात और आयात विशेषताओं को जोड़ने का।
  • ओपन जेनेरिक समर्थन, ताकि आप एक खुले जेनेरिक निर्यात कर सकें और एक बंद संस्करण आयात कर सकें।
  • स्कोप्ड/हेरार्किकल कंटेनर के लिए बेहतर समर्थन, जो आजीवन प्रबंधन में मदद कर सकता है।

थॉमस हस्तक्षेप को एक महत्वपूर्ण विशेषता के रूप में उल्लेख करता है। वर्तमान में हमारे पास इस बॉक्स के बाहर समर्थन शामिल करने की योजना नहीं है। MefContrib के लिए इंटरसेप्टिंग कैटलॉग के रूप में इसके लिए कुछ समर्थन है, मुझे विश्वास है।

3

मैं MEF की lates सुविधाओं के बारे में पता नहीं कर रहा हूँ, लेकिन मैं क्या कह सकता हूँ कि MEF एक रूपरेखा है कि अनुप्रयोगों के लिए तानाना चिंताओं को संबोधित करता है। फोकस मानक सॉफ्टवेयर के लिए ऐड-इन परिदृश्य सक्षम करने पर है। यह 'उचित' आईओसी कंटेनर के साथ इतने सारे लक्षण साझा करता है कि यह भविष्य में एक पूर्ण आईओसी कंटेनर बन सकता है।

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

जब हम किसी एप्लिकेशन को लिखने के लिए एक उपकरण के रूप में आईओसी कंटेनर का उपयोग करते हैं, तो हम घटकों के बारे में जानते हैं जो एप्लिकेशन बनाते हैं।

आईओसी कंटेनर का लक्ष्य सेवाओं की डीकॉप्लेड संरचना का लक्ष्य है जो कि अच्छा है लेकिन डेवलपर को उस घटक के बारे में पता होना चाहिए जब वह कंटेनर कॉन्फ़िगर किया जाता है जब एमईएफ घटकों की खोज करने का लक्ष्य रखता है। केवल एक चीज जो आपको जाननी चाहिए वह उस अमूर्तता के बारे में है जिसका आप उपयोग करना चाहते हैं।

एमईएफ आईओसी कंटेनर के साथ इतनी सारी समानताएं साझा करता है कि कभी-कभी यह कहना मुश्किल होता है कि हमें इसे कैसे समझना चाहिए।

मुझे लगता है कि MEF का मुख्य disaventage है:

  • गरीब जीवन प्रबंधन आईओसी
  • अवरोधन

कौन सा मुख्य बिंदु हैं, जब आईओसी कंटेनर के बारे में बात की कमी की तुलना में।

4

आईओसी कंटेनरों के बराबर होने के लिए एमईएफ में क्या गुम है?

एक रचना में समस्याओं का आसानी से निदान करने का एक तरीका।

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

समस्या का निदान करने के लिए, आपको रचना डायग्नोस्टिक्स को किसी भी तरह डंप करना होगा (उदाहरण के लिए mefx) और वास्तविक समस्या को तब तक दर्दनाक रूप से नीचे निर्भरता पथ का पालन करना होगा । जो दर्द होता है लेकिन काम करता है, जब तक कि आप चक्रीय निर्भरताएं पेश नहीं करते ...

एक नियमित आईओसी कंटेनर में यह समस्या नहीं है। यह आपको बस बताएगा "अरे, आपने रचना में उपयोग के लिए सी पंजीकृत किया है लेकिन मुझे इसकी निर्भरता डी नहीं मिल रही है"।

इस विषय पर भी मेरे blog post देखें।

+1

आपको शायद यह सुनकर खुशी होगी कि एमईएफ vNext में, अस्वीकृति को अक्षम करने का एक तरीका है ताकि किसी भी समय एक अपवाद फेंक दिया जा सके। इससे सिस्टम में समस्या को ढूंढना बहुत आसान हो जाएगा जहां आप किसी भी चीज़ को अस्वीकार करने की अपेक्षा नहीं करते हैं। –

+0

@ डैनियल: धन्यवाद, मैंने एमईएफ 2 पूर्वावलोकन 3 रिलीज पर एक नज़र डाली थी लेकिन किसी भी तरह से मुझे यह याद आया। –

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