我正在尝试使用MEF来帮助接受从数据库加载的插件的应用程序。当我尝试创建新的AssemblyCatalog
并传入动态创建的程序集时,MEF似乎无法发现任何Exports
。
Assembly a = Assembly.Load(new AssemblyMover().GetAssemblyBytes("Plugin1"));
AssemblyCatalog c = new AssemblyCatalog(a);
AssemblyCatalog
不包含任何部分(但它应该)。
如果我将可导出类移动到当前程序集中,请运行以下命令:
AssemblyCatalog c = new AssemblyCatalog(Assembly.GetExecutingAssembly());
MEF发现这部分很好(我想假设)。
接口在共享程序集中定义:
public interface IPlugin
{
string Name { get; }
}
程序集Plugin1
只有一个类:
[Export(typeof(IPlugin))]
public class TestPlugin1 : IPlugin
{
public string Name
{
get { return "Plugin1"; }
}
}
我认为MEF使用反射来发现部件,所以我验证了程序集已正确加载并包含一个类TestPlugin1
。
foreach (Type t in a.GetTypes())
{
MessageBox.Show(t.Name);
}
有什么想法吗?