单个.dll与MEF

时间:2017-03-08 12:44:51

标签: c# plugins reflection mef

使用反射我可以加载一个dll。

Assembly testAssembly = Assembly.LoadFile(@"c:\Test.dll");

但是使用MEF,目录中的所有插件都是红色的。 有没有办法与MEF做同样的事情?

我可以这样做:

public IPlugn Load(string name)
    {
        return Plugins
          .Where(l => l.Name.Equals(name))
          .FirstOrDefault();
    }

但这是基于整个插件列表。

亲切的问候

Dipke

1 个答案:

答案 0 :(得分:2)

目录是MEF用于查找插件的机制 - 它们非常灵活。

您可能正在使用DirectoryCatalog?

如果是这样,您可以使用采用搜索模式的overload of the constructor

var catalog = new DirectoryCatalog("C:\\", "Test.dll");

或者,您可以使用AssemblyCatalog,这样您就可以只指定要使用的程序集。

var catalog = new AssemblyCatalog(Assembly.LoadFile("C:\\Test.dll"));

最后,如果您想要任何特定的行为(从Web服务调用加载插件,或者像这样的疯狂的东西),那么您可以实现自己的ComposablePartCatalog