我正在尝试使用Managed Extensibility Framework (MEF)框架向我的 C# 应用程序添加插件可扩展性,到目前为止一切正常;我有我的主/主机应用程序从定义的文件夹加载插件,并且可以从主应用程序调用它们的方法等。主机应用程序和插件都引用了一个单独的 dll 程序集,其中包含所有项目通用的接口。
这工作正常,我可以从主应用程序调用/与插件交互。但是,我也希望能够从插件与主机应用程序交互,但似乎无法找出这是如何完成的。
我希望能够从我的插件中获取/设置/执行主应用程序中导出的属性和方法。目前我只能从主应用程序中对插件“说话”,反之亦然。
到目前为止我的代码:
接口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";
}
}
}