我正在尝试使用 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 使用反射来发现零件,因此我验证了程序集已正确加载并包含一个 class TestPlugin1
。
foreach (Type t in a.GetTypes())
{
MessageBox.Show(t.Name);
}
有什么想法吗?