2012-11-17 7 views
9

मुझे ऐसा करने के लिए कोई लेख या लिंक नहीं मिल रहा है और यह एक स्पष्ट समस्या की तरह प्रतीत होता है (उदाहरण के लिए जब आपके पास स्रोत कोड नहीं है या मौजूदा प्रकार का उपयोग करना चाहते हैं जो MEF के लिए नहीं लिखा गया हैनिर्यात विशेषता के बिना आप एमईएफ में एक प्रकार का निर्यात कैसे करते हैं? (उदाहरण के लिए प्रोग्रामेटिक)

container.ComposeExportedValue<MyClass>(myClassInstance); 

बात तुम सच में हालांकि ढूँढ रहे हैं शायद नई परिपाटी है: मन) में

उत्तर

15

आप अपने कंटेनर के लिए एक मौजूदा वस्तु दृष्टान्त जोड़ने के लिए देख रहे हैं, तो आप CompositionContainer.ComposeExportedValue विधि का उपयोग कर सकते हैं आधारित प्रोग्रामिंग मॉडल, जो आपको गुणों के बजाय नामकरण सम्मेलनों के आधार पर भागों को बनाने की अनुमति देता है, लेकिन यह सुविधा केवल .NET 4.5 में उपलब्ध है।

प्रयोग उदाहरण (इस myAssembly में हर प्रकार जो एक IController रूप IController लागू करता निर्यात करेगा):

var registration = new RegistrationBuilder(); 

registration.ForTypesDerivedFrom<IController>() 
      .Export<IController>(); 

var catalog = new AssemblyCatalog(myAssembly, registration); 
var container = new CompositionContainer(catalog); 

कैसे MEF के नए सम्मेलन मॉडल can be found here उपयोग करने के लिए एक अच्छा उदाहरण है।

उम्मीद है कि इससे मदद मिलती है।

+0

बिल्कुल सही धन्यवाद। अफसोस की बात है, ऐसा लगता है कि यह 4.5 फीचर केवल – blue18hutthutt

+0

है मान लीजिए कि आप पूर्वावलोकन संस्करण पर अपना उदाहरण आधारित हैं? कोई 'कार्यान्वयन' विधि नहीं है, [इसके बजाय] (https://msdn.microsoft.com/en-us/library/system.componentmodel.composition.registration.registrationbuilder.aspx) कई 'फॉरटाइप'/'फोर्टेप्स' हैं 'विधियों। – Stijn

+1

@Stijn आप सही हैं, तब से एपीआई बदल गया है - 'ForTypesDerivedFrom' ने' कार्यान्वयन 'को बदल दिया है। मैंने तदनुसार अपना जवाब संपादित कर लिया है। –

10

आप InheritedExport विशेषता के साथ एक अंतरफलक चिह्नित करते हैं, सूची के भीतर सभी मॉड्यूल में निर्यात किया जाता है, जो इस इंटरफ़ेस को लागू हैं, चाहे वे एक निर्यात विशेषता या नहीं के साथ चिह्नित हैं।

इंटरफ़ेस:

[InheritedExport] 
public interface IContract { ... } 

मॉड्यूल:

// No [Export] attribute 
public class ModuleImplementation : IContract { ... } 

अब MEF मॉड्यूल इंजेक्षन जाएगा।

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

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