2012-03-09 14 views
7

का उपयोग कर उदाहरणों मैं इसआयात कर रहा है कई MEF

public interface IFoo { } 

[Export("A", typeof(IFoo))] 
public class Foo1 : IFoo { } 

[Export("B", typeof(IFoo))] 
public class Foo2 : IFoo { } 

तरह IFoo इंटरफेस को लागू करने के लिए कुछ वर्गों के निर्यात कर रहा हूँ जब मैं यह अच्छी तरह से काम करता है

containter.GetExportedValue<IFoo>("A"); 

का उपयोग कर उनमें से एक आयात करने की कोशिश लेकिन जब मैं कोशिश इस

[ImportMany] 
IFoo[] foos; 

यह काम नहीं करता जैसे उन सभी को आयात करने के लिए।

क्या कोई मुझे बता सकता है कि इसे कैसे हल किया जाए?

+0

प्रश्न - एक संपत्ति के साथ संपत्ति नहीं होना चाहिए; सेट; ? – labroo

उत्तर

9

यह दोनों तरीकों से करवाने के लिए, 2 निर्यात की घोषणा:

public interface IFoo { } 

[Export(typeof(IFoo))] 
[Export("A", typeof(IFoo))] 
public class Foo1 : IFoo { } 

[Export(typeof(IFoo))] 
[Export("B", typeof(IFoo))] 
public class Foo2 : IFoo { } 

तो यह काम करना चाहिए (मैं एक परीक्षण नमूना किया था और यह काम करने के लिए मिल गया)।

एचटीएच,

बाब।

+0

हाय @ बाबून, मैंने सोचा कि [निर्यात (स्ट्रिंग, टाइप)] का उपयोग करके दोनों एक ही समय में निर्यात करते हैं। – Michelle

+0

यह खूबसूरती से काम करता है। साथ ही, यदि आप निर्यात में से किसी एक पर नाम छोड़ देते हैं, तो यह डिफ़ॉल्ट हो जाता है, जो कुछ प्रकार के परिपत्र निर्भरताओं को दूर करने के लिए वास्तव में उपयोगी होता है। – Contango

+0

क्या कोई तरीका है जो मैं कर सकता हूं [ImportMany] और अभी भी अनुबंध नाम प्राप्त कर सकते हैं? –

3

अपने निर्यात पर अनुबंध नाम हटाएं।

[Export("A", typeof(IFoo))] 

करने के लिए

[Export(typeof(IFoo))] 

पहले परिदृश्य में आप एक अनुबंध, नाम "ए" और प्रकार IFoo से मेल खाता है, जबकि आपके आयात में कई आप सब कुछ है कि के एक अनुबंध से मेल खाता आयात कर रहे हैं निर्यात कर रहे हैं टाइप IFoo (कोई अनुबंध नाम नहीं), इसलिए अनुबंध नामों के साथ निर्यात पर विचार नहीं किया जाता है।

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

+1

हां, लेकिन फिर वह अब "ए" आयात नहीं कर सकता है। –

+0

@ बाबून: मुझे आश्चर्य है कि इस मामले में दोनों प्रकार के आयात का उपयोग करने के लिए अनुबंध के साथ और बिना हिस्से को निर्यात करना संभव होगा। लेकिन मुझे नहीं पता कि यह इस मामले में वास्तव में जरूरी है या नहीं। – Gilles

+0

हाय @ गिल्स, बाबून सही है मुझे उन्हें आयात करने के लिए दोनों तरीकों का उपयोग करने की आवश्यकता है। – Michelle

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