我正在尝试使用MEF在需要时加载DLL,但是,我读过的教程中的信息并不是最有用的。
This site给出了一些代码(如下所示),但没有真正解释任何内容。
private void LoadPlugins() {
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
}
基本上我有一个带有Run方法的接口,我正在用几个DLL实现该接口。我所追求的是能够做这样的事情(伪代码)
bob = LoadDll(dllPath);
bob.Run();
有没有办法指定“bob”的类型还是通用的?如果有人可以提供帮助,我会非常感激!
答案 0 :(得分:2)
本文是否有帮助:MEF Load Plugins(dlls) from folder not in Executing assembly but another dll.Can you help? 基本上,我认为解决方案是使用AssemblyCatalog加载程序集。
答案 1 :(得分:1)
你想要的是用MEF完成的,但它非常先进。您需要构建缓存目录(请参阅我们的Codeplex站点中的示例)或使用其他元数据读取器(如CCI)。
开箱即用MEF将加载程序集以反映它们(查找mef的属性)。