C# MEF逐个加载DLL

C# MEF逐个加载DLL,c#,mef,C#,Mef,我试图在需要时使用MEF加载DLL,但是,我阅读的教程中的信息并不是最有用的 给出了一些代码(如下所示),但没有真正解释任何内容 private void LoadPlugins() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); var batch = new CompositionBatc

我试图在需要时使用MEF加载DLL,但是,我阅读的教程中的信息并不是最有用的

给出了一些代码(如下所示),但没有真正解释任何内容

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”的类型,或者它是泛型的?如果有人能帮忙,我会非常感激

本文是否有助于:
基本上,我认为解决方案是使用AssemblyCatalog加载您的程序集。

您想要的东西可以通过MEF实现,但它非常先进。您要么需要构造一个缓存目录(请参阅我们Codeplex站点中的示例),要么使用不同的元数据读取器,如CCI


开箱即用MEF将加载程序集以反映它们(查找MEF的属性)。

您如何知道要加载哪一个?MEF的要点是,除了抽象/接口定义之外,您对具体类型一无所知;如何确定从特定DLL加载导入是合适的?@arootbeer实际上,这是MEF的一种用法,但是如果您已经知道要实例化的具体类型,那么它是完全有效的。然而,我认为在本例中的使用对于OP试图实现的目标来说可能是过分的。如果您需要运行时发现程序集公开(或公开您的类型)的类型,那么MEF是非常有效的。
bob = LoadDll(dllPath);
bob.Run();