मैं Managed Extensibility Framework (MEF) ढांचे का उपयोग कर अपने सी # एप्लिकेशन में प्लगइन विस्तारशीलता जोड़ने की कोशिश कर रहा हूं, और अब तक यह ठीक हो रहा है; मेरे पास एक मुख्य फ़ोल्डर से मेरा मुख्य/होस्ट एप्लिकेशन लोडिंग प्लगइन्स है, और मुख्य अनुप्रयोग से उनकी विधियों आदि को कॉल कर सकता है। होस्ट होस्ट और प्लगइन्स दोनों एक अलग डीएल असेंबली का संदर्भ देते हैं जिसमें सभी परियोजनाओं के लिए आम इंटरफेस शामिल होते हैं।सी # के साथ एमईएफ का उपयोग, मैं प्लगइन से मेजबान पर विधियों को कैसे कॉल करूं?
यह ठीक काम कर रहा है और मैं मुख्य एप्लिकेशन से प्लगइन से कॉल/बातचीत कर सकता हूं। हालांकि, मैं प्लगइन के से होस्ट एप्लिकेशन से इंटरैक्ट करने में सक्षम होना चाहूंगा, लेकिन ऐसा नहीं लगता कि यह कैसे किया जाता है।
मैं अपने प्लगइन से मुख्य ऐप में निर्यात किए गए गुणों और विधियों को प्राप्त/सेट/निष्पादित करने में सक्षम होना चाहता हूं। वर्तमान में मैं मुख्य ऐप से प्लगइन को 'बोलने' में सक्षम हूं, न कि दूसरी तरफ भी।
मेरे कोड इस प्रकार अब तक:
इंटरफ़ेस DLL
namespace MefContracts
{
[InheritedExport]
public interface IPlugin
{
String DoWork();
}
public class Class1
{
public IPlugin plugin { get; set; }
}
}
मुख्य/होस्ट आवेदन
namespace MyMEF
{
class clsMEF
{
private CompositionContainer _container;
[Import(typeof(MefContracts.IPlugin))]
public MefContracts.IPlugin plugin;
public clsMEF()
{
Compose();
}
void Compose()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog("..\\..\\Extensions"));
_container = new CompositionContainer(catalog);
try
{
this._container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
Console.WriteLine(compositionException.ToString());
}
}
}
void Main()
{
clsMEF myMef = new clsMEF();
MessageBox.Show(myMef.plugin.DoWork());
}
}
प्लगइन
namespace MefPlugin
{
[Export]
public class Class1 : MefContracts.IPlugin
{
public String DoWork()
{
return "Plugin called";
}
}
}
मेरा होस्ट सदस्य कभी पॉप्युलेट नहीं होता है। क्या आपने कभी सामना किया था? – jsmith
@jsmith - देर से उत्तर के लिए खेद है, लेकिन मुझे लगता है कि यह इस समय का सामना करने वाली प्रारंभिक समस्या थी। यदि आपने पहले ही इसे हल नहीं किया है और यहां अपना कोड किसी अन्य प्रश्न पर पोस्ट करना चाहते हैं और यहां लिंक करना चाहते हैं तो मुझे एक नज़र डालने में खुशी होगी। – Alfie